我正在尝试使用Mongoid在Rails中创建一个问卷调查应用程序。我一直在绊倒数据库设置,因为我是新手。
我希望用户能够创建可能有不同答案数量的问题。有些问题可能有两种可能:真,假。有些可能有四种或五种可能性。
所以我试图创建一个问题模型和一个答案模型,然后将答案嵌入到问题中。我试过一个带问题的模型:string answer-a:string answer-b:string answer-c:string等等。但这两种方法看起来都很愚蠢。
有没有办法创建一个允许某人创建问题字段和答案字段的模型,但是答案字段可以有多个?那么,创建问题,添加答案,并继续添加答案,直到他们完成多项选择?
答案 0 :(得分:2)
如果答案只是字符串,那么您可以使用array field:
class Question
include Mongoid::Document
#...
field :answers, :type => Array
end
如果答案有一些内部结构(也许您想要跟踪它们何时被创建或更改),那么您可以使用embeds_many
和两个模型:
class Question
include Mongoid::Document
#...
embeds_many :answers
end
class Answer
include Mongoid::Document
#...
embedded_in :question
end
任何一个都可以让您以类似于自然列表的方式使用q.answers
,因此呈现此类内容只需<% q.answers.each do |a| %>
,您可以shuffle
将答案显示在随机顺序。
答案 1 :(得分:0)
如果你想为嵌套模型动态生成表单,我建议你遵循这个RailsCast:http://railscasts.com/episodes/196-nested-model-form-part-1
RailsCast方法使用应用程序助手来动态生成新对象。
我更倾向于使用@ mu的方法来使用jQuery来创建表单元素。关于Rails的好处是,当传递嵌套属性时,你可以给它任何你想要的索引。因此,我将生成一个索引为Time.now.to_s
且没有ID参数的新表单。所以我的控制器收到一个如下所示的参数:
{"question" => {"answers_attributes" => { "1234567" => { "description" => "New answer" } } } }