0

我正在寻找以下设计方法。我有三个模型 [regions, groups, items] 用于生成树形菜单(祖先 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

如您所见,为了构建菜单树,我为组和项目分配了一个区域:Region(s) => Group(s) => Item(s)。

项目的区域在整个应用程序中广泛使用,但是组的区域仅在呈现菜单时使用。

我不喜欢该组的区域可能与其任何项目的区域或任何它的后代不同。我确信从组中继承项目的区域是不合适的,因为项目可能没有组,组也不能从项目的唯一区域继承其区域(因为如果包含不同区域的项目由同一组同一组在不同区域下出现两次)

任何人都可以提出另一种方法吗?

4

1 回答 1

0

I'd have GroupedItem and UngroupedItem that inherit from Item as such:

class Item < ActiveRecord::Base
end

class GroupedItem < Item
  belongs_to :group
end

class UngroupedItem < Item
  belongs_to :region
end

You'd need to have a type column in your Items table. More information about Single Table Inheritance with ActiveRecord.

于 2012-04-17T08:05:18.440 回答