2012-04-17 66 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的单表继承。