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

2つのアプローチ:

1つは、質問[answer]を返す代わりに、質問[answer] []を返すようにフォームを編集することです。これにより、回答が配列になります。

編集:私はあなたの質問を詳しく読んでいます、そしてあなたはいくつかのJS動的レンダリングフォームを持っているようです。その場合、最後に空の角かっこセット[]を指定してIDを設定すると、返されたフォームオブジェクトが配列に変換されます。

もう1つは、モデルのセッターをオーバーライドして、文字列を配列に変換することです。最も安全な方法は、一致するゲッターを作成することです

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 に答える
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 に答える