我有一个带有几个accepts_nested_attributes_for的模型。在保存和移动时,要求我至少拥有每个嵌套属性中的一个。
但是,验证会在保存之前进行,因此当我删除某个项目并继续前进时,它就会通过它。
如何验证保存时,我在每个嵌套类型中至少有一个项目?
答案 0 :(得分:6)
accepts_nested_attributes_for存在错误。这意味着在父模型中进行验证时,您必须更加狡猾。
您可以在每个嵌套模型中使用:after_save回调来检查它是否是最后一个。但是如果你想要确保至少有一个嵌套关联很多,那就不是很干了。
然而,这是链接错误的有效解决方法:
class Whatever < ActiveRecord::Base
:has_many => :association_a
:has_many => :association_b
def ensure_minimum_associations
bad_associations = [:association_a, :association_b].
select{|assoc| self.send(assoc).all?{|a| a.marked_for_destruction?}}
unless bad_associations.empty?
bad_associations.each do |association|
errors.add_to_base "Each #{self.class.name.downcase} must retain at least one #{association}"
end
return false
end
end
end
答案 1 :(得分:0)
您始终可以在模型上调用valid?
,它将运行验证。
答案 2 :(得分:0)
我相信你正在寻找validates_associated