2012-10-16 4 views
1

Group 인스턴스에는 Person 인스턴스 또는 기타 Group 인스턴스가 포함될 수 있습니다. Ancestry gem을 사용하여 계층 구조를 미러링하고 싶지만 Ancestry는 두 가지 모델로 작동하지 않습니다. 나는 개념적으로 다르기 때문에 PersonModel에서 단일 테이블 상속을 사용하고 싶지 않습니다.레일 3 : 계층 구조로 그룹 및 멤버 모델링

이 요구 사항을 모델링하는 가장 좋은 방법은 무엇입니까? 다 대다 또는 다른 유형의 연결을 사용하여 내 계층 구조를 만들려고합니다. 그러나 두 모델 (PersonGroup)을 서로 멋지게 만드는 방법을 모르겠습니다.

감사합니다.

답변

1

은 쉽게 (단일 모델 계층 구조를 맞는 어떤 사용) 한 다음 그룹과 사용자 사이의 one-to-many 연관을 추가 할 그룹 클래스의 계층 구조를 설정할 수 있습니다

@group.children # => a list of groups 
@group.parent # => another group or nil if root 
@group.users # => the users directly below this group 
@user.group  # => a group 

그룹이 사용자 또는 하위 그룹 중 하나이지만 둘 다 가질 필요가있는 경우 유효성 검사 규칙을 사용하십시오.

1

다형성 연결을 사용하려는 것처럼 들립니다. http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

편집 계층 구조를 포함하는 업데이트 :

: 당신은 몇 가지 새로운 모델, 예를 들어 "수준"과 "어린이"를 필요로 같은

는 소리를 간단한 예를 들어 레일 가이드를 참조하십시오 그룹 모델 :

has_many :children, :as => :groupable 
belongs_to :level 

사람 모델 :

has_many :children, :as => :groupable 

레벨 모델 :

has_many :children 
has_one :group 

attr_accessible :level (integer) 

어린이 모델 :

belongs_to :groupable, :polymorphic => true 

아이들과 수준 모델을 결합하여이 문제를 단순화 할 수도 있지만 액티브 두 관계를 처리 할 수 ​​있는지 모르겠어요 두 개의 테이블 사이 (그룹 또는 사람들 인 어린이 그룹을위한 그룹과 부모 그룹을위한 그룹).

계층 구조 레벨은에 반영됩니다.레벨 모델의 정수.

class Group < AR::Base 
    acts_as_tree # or whatever is called in your preferred tree implementation 
    has_many :users 
end 

class User < AR::Base 
    belongs_to :group 
end 

당신은해야합니다 :

+0

그래서'그룹'은 다형성 관련 열을 포함할까요? 또한, 어떻게이 계층 구조를 얻을 수 있습니까? – RailinginDFW