validation嵌套属性的数量

我有一个嵌套属性的模型:

class Foo < ActiveRecord::Base has_many :bar accepts_nested_attributes_for :bar end 

它工作正常。 但是我想确保每一个Foo,我至少有两个Bar。 我无法访问我的validation中的bar_attributes ,所以我似乎无法validation它。

有没有干净的方法呢?

 class Foo < ActiveRecord::Base has_many :bars accepts_nested_attributes_for :bar def validate if self.bars.reject(&:marked_for_destruction?).length < 2 self.errors.add_to_base("Must have at least 2 bars") end end end 

控制器将负责构建/更新条形图,因此您只需要查看是否有足够的条形图。

托尼的答案实际上不会处理删除现有 Foo栏的情况。

由于父(Foo)的validation发生在嵌套子(Bars)被销毁之前,Foo将通过validation,然后条将被销毁并且不会向用户呈现错误。

我将此添加为评论但截至目前没有足够的代表

万一有人看到这个需要它适用于Rails 3.我认为add_to_base(Tony和Jeremy使用)已被删除所以它需要像这样:

 class Foo < ActiveRecord::Base has_many :bars accepts_nested_attributes_for :bar def validate if self.bars.reject(&:marked_for_destruction?).length < 2 self.errors.add(:base, "Must have at least 2 bars") end end end