这是两个模型
产品和变体
class Product.rb
has_many :variants, dependent: :destroy
end
class Variant.rb
belongs_to :product
end
Variant.create(product_id:rand(500..3000))
即使没有特定ID的产品,上面的代码行也会在db中创建一个变体。 为了解决这个问题 在before_create中,我可以查询并检查产品是否存在。
除此之外,rails提供了任何内置方法或函数来处理此类情况。
。答案 0 :(得分:1)
尝试:
class Variant.rb
belongs_to :product
validates :product, presence: true
end
根据docs,这将确保product
记录确实存在。
顺便说一句,应该是belongs_to :product
,而不是belongs_to :products
。
答案 1 :(得分:1)
应该类似于下面的variant.rb
class Variant < ApplicationRecord
belongs_to :product
end
在Rails 5中,每当我们定义一个Emirates_to关联时,都需要在this更改后默认显示关联记录。
在Rails 4.x世界中,要添加对groups_to关联的验证,我们需要添加所需选项:true。
class Variant < ApplicationRecord
belongs_to :product, required: true
end
答案 2 :(得分:0)
默认情况下,在Rails 5中,当您指定reference
关系时,belongs_to
是必需的。如果您不想对optional: true
的存在进行任何强迫,则需要指定reference
。
在Rails 4中,您需要指定required: true
以确保reference
对象存在并有效。
belongs_to :product, required: true
您可以在下面查看博客文章:
https://blog.bigbinary.com/2016/02/15/rails-5-makes-belong-to-association-required-by-default.html
希望这会有所帮助。