アクティブなレコードで継承を実装する方法は?
たとえば、Animalクラス、Dogクラス、Catクラスが必要です。
モデルとデータベーステーブルのマッピングはどのようになりますか?
Railsは単一テーブル継承をサポートしています。
AR docs から:
Active Recordは、デフォルトで「type」という名前の列にクラスの名前を格納することで継承を許可します(Base.inheritance_columnを上書きして変更できます)。つまり、継承は次のようになります。
class Company < ActiveRecord::Base; end class Firm < Company; end class Client < Company; end class PriorityClient < Client; end
Firm.create(:name => "37signals")を実行すると、このレコードはtype = "Firm"の会社テーブルに保存されます。その後、Company.find(:first、 "name = ‘37signals’")を使用してこの行を再度フェッチすると、Firmオブジェクトが返されます。
テーブルにタイプ列が定義されていない場合、単一テーブルの継承はトリガーされません。その場合、それは通常のサブクラスと同じように機能し、それらを区別したり、findを使用して正しい型を再ロードしたりする特別な魔法はありません。
かなり良いチュートリアルがここにあります: http://juixe.com/techknow/index.php/2006/06/03/Rails-single-table-inheritance/
モデル:
class Animal < ActiveRecord::Base; end
class Dog < Animal; end
class Cat < Animal; end
移行:
class CreateAnimals < ActiveRecord::Migration
def self.up
create_table :animals do |t|
# Other attributes...
t.string :type
end
end
def self.down
drop_table :animals
end
end