模型设置
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'都是零。为什么推动操作员不会对哺乳动物的外键进行自动保护?
答案 0 :(得分:0)
你必须打破阻塞,如果找不到该项,Rails'first_or_create
只运行阻止。