0

Mongoidを使ってRailsでアンケートアプリを作ろうとしています。私は物事に慣れていないため、データベースのセットアップにつまずき続けています。

さまざまな数の回答が可能な質問をユーザーが作成できるようにしたいと考えています。一部の質問には、真と偽の 2 つの可能性があります。4 つまたは 5 つの可能性がある場合もあります。

そこで、質問モデルと回答モデルを作成して、回答を質問に埋め込もうとしました。question:string answer-a:string answer-b:string answer-c:string などのモデルを試しました。しかし、どちらのアプローチも愚かで扱いにくいように見えます。

誰かが質問フィールドと回答フィールドを作成できるようにするモデルを作成する方法はありますが、回答フィールドは倍数を持つことができますか? では、質問を作成し、回答を追加し、複数選択が完了するまで回答を追加し続けますか?

4

2 に答える 2

2

回答が単なる文字列の場合は、配列フィールドを使用できます。

class Question
  include Mongoid::Document
  #...
  field :answers, :type => Array
end

回答に何らかの内部構造がある場合 (おそらく、回答がいつ作成または変更されたかなどを追跡したい場合)、次embeds_manyの 2 つのモデルを使用できます。

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

于 2012-05-09T04:55:16.737 に答える
0

ネストされたモデルの動的に生成されたフォームが必要な場合は、RailsCast に従うことをお勧めします: http://railscasts.com/episodes/196-nested-model-form-part-1

RailsCast メソッドは、アプリケーション ヘルパーを使用して新しいオブジェクトを動的に生成します。

私は、jQuery を使用してフォーム要素を作成する @mu の方法を好む傾向があります。Rails の優れた点は、ネストされた属性を渡すときに、任意のインデックスを指定できることです。Time.now.to_sというわけで、たとえばID パラメーターなしのインデックスを使用して、新しいフォームを生成します。そして、コントローラーは次のようなパラメーターを受け取ります。

{"question" => {"answers_attributes" => { "1234567" => { "description" => "New answer" } } } }
于 2012-05-10T20:15:41.340 に答える