2

質問に複数の回答があり、1 つだけが正しいとマークされているネストされたモデルを使用しています。1 つの質問だけが正しいとマークされていることを確認するにはどうすればよいですか 正しいのはブールフィールドです。

#question model
validate :one_correct_answers

  def one_correct_answers
    if self.choices.correct_choices > 1
      errors.add(:base, "please select only one correct answer")
    end
  end
4

2 に答える 2

1

質問モデル

class Question
  has_many :choices
  accepts_nested_attributes_for :choices, :reject_if => ->(choice){ choice[:value].blank? }
  validate :only_one_correct_answer

  private
  def only_one_correct_answer
    unless (choices.select{ |choice| choice.correct }.size == 1)
      errors.add(:choices, "You must provide only 1 correct answer")
   end
  end
end

フォーム HTML

<input name="question[choices_attributes][0][correct]" type="checkbox">
<input name="question[choices_attributes][1][correct]" type="checkbox">
<input name="question[choices_attributes][2][correct]" type="checkbox">
<input name="question[choices_attributes][3][correct]" type="checkbox"> ... till n

そして質問コントローラーで

@question = Question.new(params[:question])
@question.valid? => will automatically call Question#only_one_correct_answer and add errors,if any.

これが役立つことを願っています。:)

于 2013-08-15T07:42:31.257 に答える