我有一个带有嵌套属性的模型:
class Foo < ActiveRecord::Base
has_many :bar
accepts_nested_attributes_for :bar
end
它工作正常。但是我想确保对于每个 Foo,我至少有两个 Bar。我无法bar_attributes
在我的验证中访问,所以我似乎无法验证它。
有什么干净的方法吗?
我有一个带有嵌套属性的模型:
class Foo < ActiveRecord::Base
has_many :bar
accepts_nested_attributes_for :bar
end
它工作正常。但是我想确保对于每个 Foo,我至少有两个 Bar。我无法bar_attributes
在我的验证中访问,所以我似乎无法验证它。
有什么干净的方法吗?
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) 的验证发生在嵌套的子级 (Bars) 被销毁之前,因此 Foo 将通过验证,然后 bar 将被销毁并且不会向用户显示任何错误。
我会将其添加为评论,但到目前为止还没有足够的代表
以防万一看到这个需要它为 Rails 3 工作。我认为 add_to_base (托尼和杰里米使用)已被删除,所以它需要像这样:
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