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

问题描述 投票:0回答:2

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

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

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

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

ruby-on-rails mongodb mongoid
2个回答
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答案以随机顺序显示它们。


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" } } } }
© www.soinside.com 2019 - 2024. All rights reserved.