2011-02-24 207 views
3

假設有一個名爲user的activerecord類,它代表數據庫的用戶表。繼承ActiveRecord對象

但我有不同的類型,其具有

  • 特殊功能的用戶
  • 特殊變量
  • 定製的關係(僱主的has_many公司,員工belongs_to的公司:)

而且這些用戶有很多共同的功能。所以我想要做的是爲每種不同類型的用戶創建類,然後從用戶類繼承它們。

  • 用戶<的ActiveRecord :: Base的
  • 僱主<用戶
  • 員工<用戶
  • 客戶<用戶

什麼是做這樣的事情的最好方法?

感謝

回答

3

很多應用程序開始了與某種形式的User模型。隨着時間的推移,隨着不同類型的用戶涌現,對它們進行更大的區分可能是有意義的。引入了AdminGuest類,作爲User的子類。現在,共享的行爲可以存在於User中,並且可以將子類型行爲推送到子類。但是,所有用戶數據仍可以駐留在用戶表中。

所有你需要做的就是添加一個type列到users表,將持有的類名實例化一個給定的行。 Active Record在從數據庫加載對象時負責實例化對象的類型。

該技術被稱爲單表繼承或STI(簡稱)。

關於STI的一篇非常好的近期文章是:http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html

+0

完美謝謝。最後,每個班的習慣關係呢? – 2011-02-24 05:29:18