人々がクイズをするアプリケーションがあります。クイズには、さまざまな種類の質問を多数含めることができます (「真か偽か」、提供された一連の回答からの選択など)。
これを実装する最善の方法は、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_data
、image_question_data
) に#question_id
列 (および主キーなし) があり、またこれは私のQuestion
モデルで:
has_one :data, polymorphic: true
このようにしたい理由は、質問にはカテゴリに関係なく一意の主キーを持たせたいからです。のような通常の URL が必要です/questions/3
。Question
モデルは#id
3の を検索し、#category
これが「ブール値」であることを確認し、boolean_question_data
テーブル内のデータを検索する必要があることを認識します。
ポリモーフィックを ( の代わりに) 使用できない理由は、そのような使用を意図していないためです。などは提供しません。代わりに、「データ」モデルから質問を参照するという逆の方法でコードを書くことを期待しています。これは明らかに私がやりたいことではありません。belongs_to
has_one
#build_data
#create_data
私はその関連付けを自分で書きますが、多くのオプション ( autosave: true, validate: true, dependent: :destroy
) も使用したいので、すべてを手動で記述するのは少しやり過ぎです。
何か提案はありますか?