2012-04-17 16 views
0

私は以下の設計アプローチをお探しです。私は三つのモデルツリーメニューを生成するために使用されている[地域、グループ、項目](祖先GEM)外部キーの共有

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:Region(s)=> Group(s)=> Item(s)。

アイテムの領域はアプリケーション全体で広く使用されますが、グループの領域はメニューのレンダリング時にのみ使用されます。

私は、グループの地域がそのアイテムの地域または実際にその子孫のいずれかと異なる可能性があるとは思いません。アイテムがグループを持たないかもしれないし、グループがアイテムのユニークなリージョンからそのリージョンを継承することもできないので、グループのアイテムのためのリージョンを継承することは適切ではないということが保証されている(異なるリージョンのアイテムが含まれていた同じグループで同じグループが異なる地域で2回出現することがあります)

誰かがこれに対して別のアプローチを提案できますか?

答えて

0

私は持っていたいようなItemから継承GroupedItemUngroupedItem

class Item < ActiveRecord::Base 
end 

class GroupedItem < Item 
    belongs_to :group 
end 

class UngroupedItem < Item 
    belongs_to :region 
end 

あなたのItems表にtype列を持っている必要があるでしょう。 Moreinformation ActiveRecordを使用した単一テーブル継承について