親オブジェクトに属する子の数をどのように検証しますか?
たとえば、回答にネストされた属性を受け入れる質問オブジェクトがある場合、次のようになります。
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であるためです。
私は何が間違っているのですか?この種の検証を実行するための回避策はありますか?
助けてくれてありがとう