保存后验证Rails模型?

Nei*_*ton 3 activerecord ruby-on-rails

我有一个带有几个accepts_nested_attributes_for的模型.在保存和移动时,要求我至少拥有每个嵌套属性中的一个.

但是,验证会在预先保存之前进行,因此当我删除某个项目并继续前进时,它就会通过它.

如何验证当我保存时,每个嵌套类型至少有一个项目?

EmF*_*mFi 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
Run Code Online (Sandbox Code Playgroud)