0

我正在尝试使用 Mongoid 在 Rails 中创建一个问卷应用程序。我一直在数据库设置上磕磕绊绊,因为我是新手。

我希望用户能够创建具有不同数量答案的问题。有些问题可能有两种可能:真、假。有些人可能有四五种可能性。

所以我尝试创建一个问题模型和一个答案模型,然后将答案嵌入问题中。我尝试了一个带有 question:string answer-a:string answer-b:string answer-c:string 等的模型。但这两种方法似乎都愚蠢而笨拙。

有没有办法创建一个模型,允许某人创建问题字段和答案字段,但答案字段可以有多个?那么,创建问题、添加答案并继续添加答案,直到他们完成多项选择?

4

2 回答 2

2

如果答案只是字符串,那么您可以使用数组字段

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以随机顺序显示它们的答案。

于 2012-05-09T04:55:16.737 回答
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" } } } }
于 2012-05-10T20:15:41.340 回答