Rails(ActiveRecord)にはSTI(単一継承テーブル)があって,テーブルは1つだけどtype
というカラムでモデルを出し分けることができる.例えば,アンケートの項目には単一/複数選択があり,これらを保存する先のテーブルは1つにまとめたいがプログラム上では別のモデルとして扱いたい場合にSTIを使うと良い.
継承したモデルと別のテーブルとの間にリレーションを作成するとkeyが見つからないと怒られることがある.
has_many
にforeign_key
を指定すれば良い.以下のように書ける.はず.
class Answer < ActiveRecord::Base has_many :item_answer_relation has_many :checks, through: :item_answer_relation has_many :radios, through: :item_answer_relation end class Item < ActiveRecord::Base end class Check < Item has_many :item_answer_relation, foreign_key: 'item_id' has_many :answers, through: :item_answer_relation end class Radio < Item has_many :item_answer_relation, foreign_key: 'item_id' has_many :answers, through: :item_answer_relation end
参考: - ruby on rails - Single-table inheritance with relationships? - Stack Overflow
サンプルコード書いてて若干自信なくなってきたので間違ってたら教えてください