我有一个 Rails 应用程序,用户在其中创建一个问题(问题模型接受答案模型的嵌套属性)和至少三个答案选择。Answer 模型的属性是 :content (用于问题)和 :correctanswer,一个布尔复选框,供用户检查答案选择是否正确。由于它是一个复选框,因此不幸的是,该表单允许用户选择多个答案为真。我这样做是因为我不知道如何让一个单选按钮与每个答案选项相关联。
为了强制用户仅将一个答案选项标记为正确,我尝试在 Question.rb 模型中创建自定义验证,但在这里你会看到我可怕的 ruby 技能。在下面的代码中,self 是问题,answers 是嵌套模型,而 correctanswer 是嵌套模型的属性。我收到一条错误消息
undefined method `correctanswer' for []:ActiveRecord::Relation
你能告诉我如何实现我想要做的事情吗?我不确定在“if”语句的末尾使用 .size != 1
(即是否会计算正确答案的数量并拒绝它?)在“if”语句的末尾,但是,由于正确答案错误首先弹出,我还没有能够看看它是否有效。
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