Nei*_*ton 3 activerecord ruby-on-rails
我有一个带有几个accepts_nested_attributes_for的模型.在保存和移动时,要求我至少拥有每个嵌套属性中的一个.
但是,验证会在预先保存之前进行,因此当我删除某个项目并继续前进时,它就会通过它.
如何验证当我保存时,每个嵌套类型至少有一个项目?
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2073 次 |
| 最近记录: |