1

我有以下情况

用户可以创建一个问题

  1. 选项中至少有 2 个答案
  2. 其中一个必须标记为正确(答案的布尔字段为“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

但我无法弄清楚如何为第二部分编写验证。我将非常感谢有关如何为此编写验证的任何帮助。谢谢。

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.count是 0。(一定是因为尚未创建答案记录)

但是对您的答案几乎没有修改,我解决了这个问题。

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 回答