不能让mongoid / rails字段接受输入作为数组

时间:2012-05-11 02:30:55

标签: ruby-on-rails mongoid

我正在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");

我已经在这里尝试了几个涉及[]的解决方案但是无处可去。

非常感谢。

2 个答案:

答案 0 :(得分:0)

两种方法:

一个是编辑表单,而不是返回问题[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

答案 1 :(得分: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'