Railsの単一テーブル継承
単一テーブル継承(STI)とは
普通は複数のテーブルが必要になる関連したテーブルを1つのテーブルにまとめる事です。
db構造が簡単になりDRYになります。
例えば、JapaneseテーブルとAmericanテーブルがあったとして、JapaneseテーブルとAmericanテーブルをRaceテーブルにまとめます。(JapaneseテーブルとAmericanテーブルは存在しない)
typeカラムでJapaneseかAmericanか判別します。
この2つのテーブルを
Raceテーブルにまとめます
実際のレコードはこんな感じになります
raceモデルの作成 $ rails g model race name:string type:string #japanese.rb class Japanese < Race end #american.rb class American < Race end #コンソール > Japanese.create(name:"Tarou") => #<Japanese id: 1, name: "Tarou", type: "Japanese", created_at: "2016-01-30 03:20:56", updated_at: "2016-01-30 03:20:56"> > American.create(name:"Joe") => #<American id: 2, name: "Joe", type: "American", created_at: "2016-01-30 03:25:21", updated_at: "2016-01-30 03:25:21"> > Race.all => #<ActiveRecord::Relation [#<Japanese id: 1, name: "Tarou", type: "Japanese", created_at: "2016-01-30 03:20:56", updated_at: "2016-01-30 03:20:56">, #<American id: 2, name: "Joe", type: "American", created_at: "2016-01-30 03:25:21", updated_at: "2016-01-30 03:25:21">]>
各モデルクラスでcreateすると自動でtypeが入ります。
参考
以下2つのサイトが非常に詳しいです。参考にさせてもらいました。ありがとうございます。