2012-04-17 65 views
0

我正在尋找以下設計方法。我有三個模型被用於生成樹狀菜單[區域,團體,項目](祖先寶石)共享外鍵

class Region < ActiveRecord::Base 
has_many :groups 
has_many :items 
end 


class Group < ActiveRecord::Base 
belongs_to :region 
has_many :items 
has_ancestry 
end 

class Item < ActiveRecord::Base 
belongs_to :region 
belongs_to :group 
end 

正如你可以看到我有分配給兩個組和項目的建設爲目的的區域menutree:地區=>小組=>項目。

項目的區域在整個應用程序中被廣泛使用,但是該組的區域僅在渲染菜單時使用。

我不喜歡該組的區域可能與其項目的任何區域或其任何後代不同。我確信,從該組繼承該項目的區域並不合適,因爲項目可能沒有一個組,也不能從該項目的唯一區域繼承其區域(因爲如果有不同區域的項目包含由同一組相同的組將出現兩次在不同的地區)

任何人都可以提出另一種方法呢?

回答

0

我不得不GroupedItemUngroupedItemItem繼承這樣:

class Item < ActiveRecord::Base 
end 

class GroupedItem < Item 
    belongs_to :group 
end 

class UngroupedItem < Item 
    belongs_to :region 
end 

,就需要在你的Items表有一個type列。 Moreinformation關於使用ActiveRecord的單表繼承。