カテゴリー:
Rails
タグ:
 Rails STI モデルの継承

このエントリーをはてなブックマークに追加
更新日時:
2013年02月12日(火)
作成日時:
2013年02月12日(火)

前の記事 / 次の記事

一つのテーブルを似たカラムを持つ関連性のあるモデルで共有しようっていう仕組み。

やることは相当簡単で、親となるモデルのテーブルに "type" カラムを作成するだけ。
あとは親を継承すれば勝手に単一テーブル継承してくれる。

次のようなテーブルとモデルをつくって

class CreateMembers < ActiveRecord::Migration
  def change
    create_table :members do |t|
      t.string :type
      t.string :name
      t.string :gender

      t.timestamps
    end
  end
end

class Member < ActiveRecord::Base
end

次のようにして継承させれば、

class TennisClubMember < Member
  attr_accessible :type, :name, :gender
end

class BaseBallClubMember < Member
  attr_accessible :type, :name, :gender
end

TennisClubMember と BaseBallClubMember は、
それぞれ独自に tennis_club_members や base_ball_club_members テーブルを持つことなく、
members テーブルを共有してデータを保存出来るようになる。