我的父母与孩子有一个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
吗?
由于
答案 0 :(得分:0)
validates_associated是对相关记录执行验证,但是在调用者的上下文中。在您的示例中,如果Parent
上的所有验证都通过,则会创建Parent
,然后它将调用Child
(所有相关子项)上的验证,如果其中一些验证失败,则创建Parent
将失败。
这也意味着当您创建Child
时,它会调用Child
上的所有验证,但这并不意味着您已将if
放入Parent
类,因为验证与Child
模型相关。
为防止每次记录为Child
时都要执行created, updated, ...
的验证,您必须在if
模型中添加Child
子句。