Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当我使用model.collection.build时,是什么导致我的活动记录关联出现此错误?_Ruby On Rails_Ruby_Rails Activerecord - Fatal编程技术网

Ruby on rails 当我使用model.collection.build时,是什么导致我的活动记录关联出现此错误?

Ruby on rails 当我使用model.collection.build时,是什么导致我的活动记录关联出现此错误?,ruby-on-rails,ruby,rails-activerecord,Ruby On Rails,Ruby,Rails Activerecord,在我的项目中,我有以下三个课程: class User < ApplicationRecord has_many :portfolios, dependent: :destroy has_many :positions, through: :portfolios end class Portfolio < ApplicationRecord belongs_to :user has_many :positions, dependent: :destroy end

在我的项目中,我有以下三个课程:

class User < ApplicationRecord
  has_many :portfolios, dependent: :destroy
  has_many :positions, through: :portfolios
end

class Portfolio < ApplicationRecord
  belongs_to :user
  has_many :positions, dependent: :destroy
end 

class Position < ApplicationRecord
  belongs_to :portfolio
end
为什么会发生这种情况?我觉得这里有些东西需要学习,但我真的不明白


附录:我认为我的关联是有意义的:一个投资组合应该只属于一个用户,一个职位应该只属于一个投资组合,一个投资组合应该有多个职位,一个用户应该有多个投资组合

你需要建立这样的职位

user = User.first
portfolio_attributes = {name: 'Portfolio_1'}
position_attributes = {name: 'Postion_1'}
user.portfolios.build(portfolio_attributes).positions.build(position_attributes)
user.save!
当我运行user.positions时,我得到以下结果

user.positions
  Position Load (0.6ms)  SELECT  "positions".* FROM "positions" INNER JOIN "portfolios" ON "positions"."portfolio_id" = "portfolios"."id" WHERE "portfolios"."user_id" = ? LIMIT ?  [["user_id", nil], ["LIMIT", nil]]
 => #<ActiveRecord::Associations::CollectionProxy [#<Position id: 1, name: "Postion_1", portfolio_id: 1>]> 
user.positions
仓位加载(0.6ms)选择“仓位”。*从“仓位”内部连接“仓位”。“仓位id”=“仓位”。“仓位id”中选择“仓位”。“仓位id”中选择“仓位”。“用户id”=?限制?[[“用户id”,无],“限制”,无]]
=> # 
user.positions
  Position Load (0.6ms)  SELECT  "positions".* FROM "positions" INNER JOIN "portfolios" ON "positions"."portfolio_id" = "portfolios"."id" WHERE "portfolios"."user_id" = ? LIMIT ?  [["user_id", nil], ["LIMIT", nil]]
 => #<ActiveRecord::Associations::CollectionProxy [#<Position id: 1, name: "Postion_1", portfolio_id: 1>]>