验证Rails中的依赖创建

时间:2018-08-28 06:57:02

标签: ruby-on-rails ruby-on-rails-5

这是两个模型

产品和变体

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提供了任何内置方法或函数来处理此类情况。

3 个答案:

答案 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

希望这会有所帮助。