3

人々がクイズをするアプリケーションがあります。クイズには、さまざまな種類の質問を多数含めることができます (「真か偽か」、提供された一連の回答からの選択など)。

これを実装する最善の方法は、Questionモデル (およびquestionsテーブル) を用意し、そのデータを質問の種類に応じて異なるテーブルに保持することです。たとえば、「真か偽か」の質問の場合、そのデータは

create_table :boolean_question_data do |t|
  t.boolean :answer
end

たとえば、「画像」の質問の場合は、そのデータを保持します

create_table :image_question_data do |t|
  t.attachment :image
  t.string :image
end

等々。

したがって、これを実装したい方法の 1 つ (私は提案を受け付けています :)) は、questionsテーブルに列#id#categoryがあり、「データ」テーブル ( boolean_question_dataimage_question_data) に#question_id列 (および主キーなし) があり、またこれは私のQuestionモデルで:

has_one :data, polymorphic: true

このようにしたい理由は、質問にはカテゴリに関係なく一意の主キーを持たせたいからです。のような通常の URL が必要です/questions/3Questionモデルは#id3の を検索し、#categoryこれが「ブール値」であることを確認し、boolean_question_dataテーブル内のデータを検索する必要があることを認識します。

ポリモーフィックを ( の代わりに) 使用できない理由は、そのような使用を意図していないためです。などは提供しません。代わりに、「データ」モデルから質問を参照するという逆の方法でコードを書くことを期待しています。これは明らかに私がやりたいことではありません。belongs_tohas_one#build_data#create_data

私はその関連付けを自分で書きますが、多くのオプション ( autosave: true, validate: true, dependent: :destroy) も使用したいので、すべてを手動で記述するのは少しやり過ぎです。

何か提案はありますか?

4

0 に答える 0