2012-04-17 3 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 : Region => Group (s) => Item (s).

항목 영역은 응용 프로그램 전체에서 광범위하게 사용되지만 그룹의 영역은 메뉴를 렌더링 할 때만 사용됩니다.

그룹의 지역이 해당 지역의 지역 또는 실제로 그 자손과 다를 수 있다는 점이 마음에 들지 않습니다. 항목이 그룹을 가질 수 없거나 그룹이 항목의 고유 한 영역에서 해당 지역을 상속받을 수 없기 때문에 그룹의 항목에 대한 지역을 상속하는 것이 적절하지 않음을 확신했습니다 (다른 지역의 항목이 포함되어 있기 때문에 동일한 그룹에 의해 동일한 그룹이 다른 지역에서 두 번 나타날 것임)

누구나 다른 접근법을 제안 할 수 있습니까?

답변

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를 사용한 단일 테이블 상속.