2016-07-21 11 views
0

Googleフォームで同様の機能を持つアプリケーションを作成しようとしています。ここでユーザーは異なる質問タイプのテンプレートを特定し、テンプレートごとに複数の回答を収集できます。具体的には、自由回答(段落テキストフィールド)と画像アップロードの質問のユーザー定義の数(および順序)を持つフォームを作成する必要があります。変数番号とフィールドの順序が関係としてあるActiveRecordモデル

このスキームをActiveRecordでどのように設定すればよいですか?私は、それぞれの質問への応答のためQuestionResponseタイプのhas_manyモデル、TextResponseUploadResponseモデルをQuestionResponseという単一テーブル継承クラスとしてそれぞれの応答を格納するFormResponseモデルを持つことを考えています。 ActiveRecordを使用してそのような構造を格納するより洗練された方法がありますか?このようなスキーマにテンプレート、質問の構造をどのように保存する必要がありますか?私はMongoの柔軟な文書モデルを使い、質問応答文書をフォーム応答文書の中のリストの中に埋め込む方がよいでしょうか?

+0

私がこれをやっていたら、あなたが提案したモデルを使用するでしょう。質問、検証、answer_data_typeについての詳細を持つ質問クラス(および場合によってはサブクラス)を追加します。その場合、QuestionResponseをそのクラスに多態的に関連付けることができます。私はモンゴーも確かに動作すると思う。私は個人的には、リレーショナルDBにもっと慣れています。 –

答えて

0

一般的な概念の1つは、結果とアンケートを別々に考え、各回答者のすべての集計結果を1つのレコードに保存することです。 Postgresを使用している場合は、このJSONデータ型用に使用することができます。あるいは、単一のMongo文書も機能するかもしれません。

0

これを実行するために単一テーブル継承を使用する必要はありません。

# Surveys have questions 
class Survey < ActiveRecord::Base 
    has_many :survey_questions 
end 
class SurveyQuestion 
    belongs_to :survey 
    belongs_to :question, polymorphic: true 
    acts_as_list # This is where you order your questions 
end 

# Questions are independent, and can be used 
# in multiple Surveys 
class UploadQuestion < ActiveRecord::Base; end 
class TextQuestion < ActiveRecord::Base; end 

# User responses are associated with the specific 
# question as it appears in a Survey. Response 
# table rows don't need extraneous columns. 
class User < ActiveRecord::Base; end 
class TextResponse < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :survey_question 
end 
class UploadResponse < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :survey_question 
end 
+0

STIと比較してこの方法のメリットは、データベース表の列の複雑さを軽減し、SurveyQuestionモデルのより複雑なモデルロジックを犠牲にして、より多くの質問タイプを簡単に拡張できることですか? – Aaron

関連する問題