2009-10-21 47 views

回答

66

Rails的支持單表繼承。

AR docs

的Active Record允許繼承由 在 列存儲類的名稱,默認情況下被命名爲「型」 (可以改變通過覆蓋 Base.inheritance_column) 。這意味着 繼承尋找的是這樣的:

class Company < ActiveRecord::Base; end 
class Firm < Company; end 
class Client < Company; end 
class PriorityClient < Client; end 

當你這樣做Firm.create(:名稱=> 「37signals公司」),該記錄將被保存 在公司表型 =「事務所」。然後,您可以使用Company.find(:first,「name ='37signals'」)再次獲取該行並返回一個Firm對象。

如果您的表中沒有定義類型列 ,將不會觸發單表 繼承。在 這種情況下,它會工作就像正常 子與 沒有特殊的魔力他們或 區分重裝正確的類型與發現。

一個不錯的教程是在這裏:http://juixe.com/techknow/index.php/2006/06/03/rails-single-table-inheritance/

15

型號:

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 
6

ActiveRecord的支持映射繼承層次到一個表(Single-table inheritance表將有一列type,它存儲了一個名字ctual類,用於選擇其他類特定的列。

它可以實現多表繼承映射,如圖所示here,但這種特別的方式是不可移植的,據我所知。

相關問題