您将如何验证属于父对象的子对象的数量?
例如,如果我有一个接受嵌套属性作为答案的问题对象:
class Question < ActiveRecord::Base
has_many :answers
accepts_nested_attributes_for :answers, :allow_destroy => true
end
而且我想限制答案的数量,我可能会向答案对象添加自定义验证,以检查其父对象并计算其他答案,如下所示:
class Answer < ActiveRecord::Base
belongs_to :question
validate :check_max_answers
private
def check_max_answers
count = question.answers.select {|a| a != self}.count
if (count > 10)
errors.add(:answers, 'Too many answers!')
end
end
end
当 check_max_answers 运行时,它只计算已经保留的其他答案。
因为答案被保存为嵌套属性,所以验证都在初始保存时通过,因为没有保存任何问题,然后它们都被保存并因此变得无效!
同样,如果我将验证放在问题对象上,也会发生同样的问题,因为 answers.count 在初始保存之前始终为 0。
我究竟做错了什么?是否有解决方法来执行这种验证?
谢谢你的帮助