日々之迷歩

世の中わからんことだらけ

ITが複雑で難しくなっていく様に翻弄される日々です。微力ながら共著させていただいた「シェル・ワンライナー160本ノック」をよろしくお願い申し上げます。

ActiveRecordでモデル継承

ActiveRecord::Baseのサブクラスになるモデルだが、さらにそれを継承するとどうなるのか?Accountモデルを継承したAdminクラスを考える。

class Account < ActiveRecord::Base
  has_many :personas, :dependent => :destroy, :order => 'id ASC'
  has_many :sites, :dependent => :destroy
  validates_presence_of :login
end
class Admin < Account
  def is_admin?
    true
  end
end

すると、Adminクラスはadminsテーブルではなくてaccountsテーブルと関連付けされるようだ。あとはAdminクラスに管理者権限を持たせると、管理者モデルが出来ないかな?とCACAnet合宿で話が出た。が、このモデルでうまくやっていけるのか?はもっと議論が必要だ。
ちなみに継承ではなくてModuleにしてMixinすれば、管理者以外にも複数の属性を持ったユーザーが出来そうだ。Ruby on Railsで開発されたプロジェクト管理ソフトウェア「RedMine」では、Moduleでユーザーの属性を実装しているらしい。