2012-02-02 109 views
0

我正在创建一个测验应用程序。这是我的模特。在创建相同模型时创建has_many和belongs_to关系

答案

class Answer < ActiveRecord::Base                      
belongs_to :question 
end 

问题

class Question < ActiveRecord::Base 
has_many :answers 
belongs_to :correct_answer, :class_name=>"Answer" 
accepts_nested_attributes_for :answers, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true 
end 

我想有一个嵌套的属性形式使用railscast 196和197的东西。这样可以创建/编辑时可以无限添加并删除。

我可以用很好的答案来创建问题。问题是创建correct_answer字段。由于答案尚未保存,所以没有id放入correct_answer_id表单中。有任何想法吗?

回答

0

我没有看到correct_answer字段在Question类中的原因。为什么不添加一个布尔列到答案表?然后,您可以执行类似Question.answers.find(correct:true)的操作来获取包含问题所有正确答案的集合。然后你可以有多个正确答案的问题。

+0

DB明智地在问题中有correct_answer_id意味着我不必遍历答案以获得正确答案 – user1169547 2012-02-02 03:44:31

+0

不,这是不正确的。您可以使用find从数据库中选择正确的问题。这将是一个查询,并将返回一个元素。即使您在问题模型中存储了正确的ID,您仍然需要查询答案数据库来解决实际问题。在Question模型中存储正确答案确实是一个糟糕的设计。模型应该是你的程序的封装元素。不要混合问题和答案。 – Max 2012-02-02 04:39:08

相关问题