为什么这有很多关系没有更新其子模型外键?

时间:2016-06-02 20:28:25

标签: ruby-on-rails activerecord

模型设置

class Tiger < ActiveRecord::Base
  has_many :mammal_tigers
  has_many :mammals, through: :mammal_tigers
  has_many :mammal_value_variants
  has_many :mammal_values, through: :mammal_value_variants

end

class Mammal < ActiveRecord::Base
  has_many :mammal_tigers
  has_many :tigers, through: :mammal_tigers
end

class MammalValueVariant < ActiveRecord::Base
  belongs_to :mammal_value
  belongs_to :variant
end

class MammalValue < ActiveRecord::Base
  belongs_to :mammal_type
  has_many :mammal_value_variants
  has_many :variants, through: :mammal_value_variants
end

关联创建代码:

tiger = mammal_value.tigers.joins(mammal_tigers: :mammal).where(mammals: {id: mammal.id}).where(property_title: "#{mammal.property}-#{mammal_value.name}").first_or_create do |tiger|
  tiger.mammals << mammal
end

因此,当我运行上面的关联创建代码时,任何'mammal.tiger_id'都是零。为什么推动操作员不会对哺乳动物的外键进行自动保护?

1 个答案:

答案 0 :(得分:0)

你必须打破阻塞,如果找不到该项,Rails'first_or_create只运行阻止。