and*_*wan 38 database inheritance activerecord model ruby-on-rails
如何使用活动记录实现继承?
例如,我想要一个类Animal,类Dog和类Cat.
模型和数据库表映射将如何?
Tob*_*ede 66
Rails支持单表继承.
来自AR文档:
Active Record允许通过将类的名称存储在默认名为"type"的列中来继承(可以通过覆盖Base.inheritance_column来更改).这意味着继承看起来像这样:
Run Code Online (Sandbox Code Playgroud)class Company < ActiveRecord::Base; end class Firm < Company; end class Client < Company; end class PriorityClient < Client; end当您执行Firm.create(:name =>"37signals")时,此记录将保存在公司表中,类型为""Firm".然后,您可以使用Company.find(:first,"name ='37signals'")再次获取此行,它将返回一个Firm对象.
如果您没有在表中定义类型列,则不会触发单表继承.在这种情况下,它将像普通的子类一样工作,没有特殊的魔力区分它们或用find重新加载正确的类型.
一个非常好的教程在这里:http://juixe.com/techknow/index.php/2006/06/03/rails-single-table-inheritance/
Pre*_*ids 16
楷模:
class Animal < ActiveRecord::Base; end
class Dog < Animal; end
class Cat < Animal; end
Run Code Online (Sandbox Code Playgroud)
移民:
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
Run Code Online (Sandbox Code Playgroud)