有可能在Mongoid / Rails中使用一个数量不一的字段?

时间:2012-05-09 04:00:26

标签: ruby-on-rails mongodb mongoid

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

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

所以我试图创建一个问题模型和一个答案模型,然后将答案嵌入到问题中。我试过一个带问题的模型:string answer-a:string answer-b:string answer-c:string等等。但这两种方法看起来都很愚蠢。

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

2 个答案:

答案 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" } } } }