1

私は次のような状況にあります

ユーザーは質問を作成できます

  1. オプションで少なくとも2つの答えがあります
  2. そのうちの1つを正しいものとしてマークする必要があります(Answerのブールフィールドは「is_correct」です)

この最初の部分では、モデルで次のコードを試しています

「質問」モデル

class Question < ActiveRecord::Base
  has_many :answers
  validate :at_least_two_answers

  private
    def at_least_two_answers
      if answers.size < 2
        errors[:base] << "Need at least 2 answers"
      end
    end
end

「回答」モデル

class Answer < ActiveRecord::Base
  belongs_to :question
end

しかし、私は2番目の部分の検証を書く方法を理解することができません。そのための検証をどのように書くことができるかについての助けに感謝します。ありがとう。

4

2 に答える 2

2

次のコマンドを使用して、エラーメッセージをより意味のあるものにします。

count = answers.count { |a| a.is_correct? }
errors[:base] << (count == 0 ? "One answer should be correct" : "Only one answer can be correct") unless count == 1
于 2012-07-14T05:49:08.353 に答える
1

助けてくれてありがとう。カウントがanswers.count0になっているため、カウントが機能しませんでした(回答のレコードがまだ作成されていないためである可能性があります)

しかし、あなたの答えにほとんど変更を加えることなく、私は問題を修正しました。

validate :one_answer_right

def one_answer_right
  count = 0
  answers.each do |a|
    if a.is_correct?
      count += 1
    end
  end
  errors[:base] << (count == 0 ? "One answer should be correct" : "Only one answer can be correct") unless count == 1
end
于 2012-07-14T18:54:47.773 に答える