0

我正在 Mongoid/Rails 项目中创建一个问题/答案模型。我希望用户创建自己的问题,然后创建可能的答案:2 个答案或 3 个答案或更多。我有表格,所以他们可以添加任意数量的问题,但我收到了这个错误:

Field was defined as a(n) Array, but received a String with the value "d".

我不仅没有得到数组,而且还消除了“a”、“b”和“c”的答案,只保存了“d”。

我的模型:

class Question
  include Mongoid::Document
  field :question
  field :answer, :type => Array
end

_form.html.haml 的相关部分:

.field
  = f.label :question
  = f.text_field :question
%p Click the plus sign to add answers.
.field
  = f.label :answer
  = f.text_field :answer
#plusanswer
  = image_tag("plusWhite.png", :alt => "plus sign")

.actions
  = f.submit 'Save'

在需要时重复答案字段的 jQuery:

$("#plusanswer").prev().clone().insertBefore("#plusanswer");

我在这里尝试了几种涉及 [] 的解决方案,但一无所获。

非常感谢。

4

2 回答 2

0

如果您不想在 javascript 和您的模型之间来回争论很多值,并且您了解如何使用 fields_for 和嵌套属性,那么更好的方法可能是将答案分开模型并将它们嵌入到问题模型中所以:

class Question
  include Mongoid::Document
  embeds_many :answers
end

class Answer
 include Mongoid::Document
 field :content # or whatever you want to name it
end

你的表格看起来像这样(请原谅我的 HAML):

.field
  = f.label :question
  = f.text_field :question
%p Click the plus sign to add answers.
= f.fields_for :answers do |ff|
  .field
    = ff.label :content
    = f.text_field :content
  #plusanswer
    = image_tag("plusWhite.png", :alt => "plus sign")

.actions
  = f.submit 'Save'
于 2014-11-10T01:22:17.420 回答
0

两种方法:

一种是编辑表单,而不是返回 question[answer],而是返回 question[answer][],它将 answer 构建为一个数组。

编辑:我正在仔细阅读您的问题,似乎您有一些 JS 动态呈现表单。在这种情况下,在末尾使用空括号 set [] 设置 id 应该会将返回的表单对象转换为数组

另一种是覆盖模型中的setter,将字符串转换为数组。最安全的方法是创建一个匹配的 getter

class Question
  field :answer, type: Array

  def answer_as_string
    answer.join(',')
  end

  def answer_as_string=(string)
    update_attributes(answer: string.split(','))
  end
end

然后:answer_as_string在您的表格中使用

于 2012-05-11T02:55:49.263 回答