ユーザーが質問を作成し(質問モデルは回答モデルのネストされた属性を受け入れる)、少なくとも3つの回答の選択肢があるRailsアプリがあります。Answerモデルの属性は、:content(質問用)と:correctanswerであり、ユーザーが回答の選択が正しいかどうかを確認するためのブールチェックボックスです。これはチェックボックスであるため、残念ながら、このフォームではユーザーが複数の回答をtrueとして選択できます。各回答の選択肢に1つのラジオボタンを関連付ける方法がわからなかったため、この方法で行いました。
ユーザーに1つの回答の選択肢のみを正解としてマークするように強制するために、Question.rbモデルでカスタム検証を作成しようとしましたが、ここに私の恐ろしいルビースキルが表示されます。以下のコードでは、selfが質問、answersがネストされたモデル、correctanswerがネストされたモデルの属性です。エラーメッセージが表示されます
undefined method `correctanswer' for []:ActiveRecord::Relation
私がやろうとしていることを達成する方法を教えてください。'if'ステートメントの最後に使用するかどうか .size != 1
(つまり、正解の数をカウントして拒否するかどうか)はわかりませんが、正解エラーが最初に表示されたため、まだ使用していません。それが機能するかどうかを確認できます。
validate :only_one_checked_box
def only_one_checked_box
if self.answers.correctanswer.reject(&:marked_for_destruction?).size != 1
self.errors[:base] << "Must mark one and only answer as correct"
end
end