rails validates_associated if / unless not working

时间:2016-02-08 12:48:26

标签: ruby-on-rails ruby-on-rails-4 activerecord

我的父母与孩子有一个has_many关联。子类有一些自己的验证。我只希望在父级的值设置为true时运行子验证。出于某种原因,无论我尝试什么,孩子的验证总是运行。

父类

class Parent < ActiveRecord::Base

  has_many :children
  accepts_nested_attributes_for :children, allow_destroy: true, reject_if: :all_blank
  validates_associated :children, if: Proc.new { |m| m.do_validation == true }

end

儿童班

class Child < ActiveRecord::Base
  validates_presence_of :name
end

我在这里错误地使用validates_associated吗?

由于

1 个答案:

答案 0 :(得分:0)

validates_associated是对相关记录执行验证,但是在调用者的上下文中。在您的示例中,如果Parent上的所有验证都通过,则会创建Parent,然后它将调用Child(所有相关子项)上的验证,如果其中一些验证失败,则创建Parent将失败。

这也意味着当您创建Child时,它会调用Child上的所有验证,但这并不意味着您已将if放入Parent类,因为验证与Child模型相关。

为防止每次记录为Child时都要执行created, updated, ...的验证,您必须在if模型中添加Child子句。