我正在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");
我已经在这里尝试了几个涉及[]的解决方案但是无处可去。
非常感谢。
答案 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'