2012-03-19 5 views
4

그룹 구성원간에 비용/채무를 추적하기 위해 레일스 앱을 구축하고 있습니다. 가정을 가정 해 봅시다. 지금까지 그룹, 사용자 및 비용 - 기본에 대한 모델이 있습니다. 지금은 그룹과 사용자 간의 연관성을 파악하려고합니다. 예를 들어 그룹에는 많은 사용자가있을 수 있으며 사용자는 여러 그룹을 가질 수 있습니다. 따라서 조인 테이블을 사용하여 HABTM 연결을 설정합니다. 그러나 Group은 또한 소유자 인 한 명의 소유자를 가질 수 있기 때문에 혼란 스럽습니다. 내가 지금 생각하는 곳이다 :레일 - 동일한 모델에 대한 다중 연관

class Group < ActiveRecord::Base 
    has_and_belongs_to_many :users 
    has_one :owner, :class_name => "User" 
end 

class User < ActiveRecord::Base 
    has_and_belongs_to_many :groups 
end 

현재 그룹의 테이블에 OWNER_ID 필드있다, 그러나 나는 시도하고 group.owner을 포함 아무것도 할 때 나는 PostgreSQL의 오류 column users.group_id does not exist을 얻고있다. 나는 상당히 잃어 버렸습니다 - 여기에 같은 모델에 대한 여러 연관을 표현하는 가장 좋은 방법에 대한 아이디어가 있습니까?

+0

'HABTM '은 이미 그룹에 많은 사용자가 있다는 것을 의미합니다. 맞습니까? 따라서 해당 사용자 중 한 명이 "소유자"여야합니다. 할 수있는 일은'has_many : through'를 사용하고 그 필드를 사용하여 그룹의 소유자를 지정하는 것입니다. – Zabba

답변

12

그래서 나는 당신이 얻을하려는 팔로우 생각이 디아에서 만든 빠른 ERD이다 사용자 및 그룹. 나는 owner_id 컬럼을 사용했기 때문에 테이블과 모델이 더 명확하고 다중 user_id 컬럼에 대한 혼동을 피할 수있다. 그러면 다음 모델이 작동합니다.

class Group < ActiveRecord::Base 
    has_and_belongs_to_many :users 
    belongs_to :owner, :class_name => "User", :foreign_key => "owner_id" 
end 

class User < ActiveRecord::Base 
    has_and_belongs_to_many :groups 
    has_many :owned, :class_name => "Group", :foreign_key => "owner_id" 
end 
+0

내 코드에서'User'에 대한 두 개의 속성'groups'을 더 이상 알지 못했습니다. –

+0

성공! 내 그룹 모델에서 'has_one-/belongs_to-'소유자 연결을 전환 한 것처럼 보이고 : 소유 솔루션이 완벽합니다. 너무 다이어그램을 사랑해. 감사! – ark

+1

다이어그램으로 ...이 녀석은 누구입니까?! 잘 했어. –

1

무엇에 대해 :

class Group < ActiveRecord::Base 
    has_and_belongs_to_many :users, :through => :membership 
    has_one :owner, :class_name => "User" 
end 

class User < ActiveRecord::Base 
    has_and_belongs_to_many :groups, :through => :membership 
    has_many :owned, :class_name => "Group" 
end 

그리고 user_idgroup_id와 모델 Membership을 만들? 당신은 단지 사이의 소유권에 대한 직접 연결을 추가 할 필요가 같은

simple erd

것 같습니다 :