2015-04-15 48 views
2

我有,我想放到一個單一lookups表,而不必單獨20+表,每一個具有相同屬性的幾個項目:軌道4:單表繼承和不使用類名作爲「類型」

  • 國家
  • 狀態
  • email_types
  • phone_types
  • address_types
  • 等...

在Rails中,我只是將type列添加到lookups表中,它「神奇地」起作用。

不過,我已經命名空間爲一些開發商的易於使用的車型,因爲它變得有點混亂:

# app/models/lookup.rb 
class Lookup < ActiveRecord::Base 
end 

# app/models/lookups/country.rb 
class Lookups::Country < Lookup 
end 

所以,當我Lookups::Country.create(name: "Italy"),它存儲"Lookups::Country"type

但所有優秀的開發人員,我最終會做一些重構,和而不是扔進一個app/models/lookups命名空間中的所有查詢,我要打破他們到他們的各種元素:

# app/models/addresses/country.rb 
class Addressess::Country < Lookup 
end 

的改變命名空間的唯一原因是隨着它越來越大,重新組織項目。

因此,當我Addressess::Country.create(name: "Italy")現在,它存儲type"Addressess:Country"。現在問題是在lookups表中有2個「類型」的國家。

基本上,我只是「丟失」了我的數據,因爲我將模型移動到了不同的命名空間。我將不得不去更新所有"Lookups::Country"記錄以獲得"Addressess::Country"類型的記錄。

有什麼辦法可以避免這種情況?我會頻繁地移動模型,直到它們被成熟地組織起來,並且每次移動文件以使開發人員的生活變得更簡單時,都不會需要進行數據庫更新/遷移。

回答

0

覆蓋每個模型的sti_name類方法可能有效。

試試這個 -

# app/models/addresses/country.rb 
class Addressess::Country < Lookup 
    def self.sti_name 
     "Address" 
    end 
end