2011-09-14 2 views
2

나는 (친구, 가족, 이웃 등)에 대해 방향없는 관계를 허용하려는 사람 모델이 있습니다. 한 사람을 다른 사람의 친구로 표시하면 둘 다 있습니다. 서로의 친구.ActiveRecord에서 친구 관계를 모델로 만드는 방법

id person_a_id person_b_id relationship_type 
-- ----------- ----------- -------------------- 
1  1   2   friend 
2  1   3   neighbor 

을이 날은 말한다 무엇 :

Class People 
    id 
    name 

Class Relationship 
    id 
    person_a_id 
    person_b_id 
    relationship_type 

이제 가정 우리는 어떤 사람들의 데이터 (레코드 ID를 = 1,2,3,4,5)이이 관계 테이블이 보일 수 있습니다 어떻게해야 사람 1에게는 친구 (사람 2)와 이웃 (사람 3)이 있습니다. 또한 Person 2에는 친구 (Person 1)가 있고 Person 3에는 이웃 (Person 1)이 있다고 알려줍니다.

나는 이것을 Self-Referential Association과 함께 할 수 있다고 생각하지만 깨끗한 방법이 있다고 생각합니다. 내가 뭔가를 놓치고 거기에 보석이있어, 내 모든 필요를 충족시키기 위해 기다리고있다 (적어도이 질문이가는 한)? 아니면 하나를 써야합니까?

답변

5

자기 참조 협회가 여기에 오는 길입니다.

내 의견으로는이 주제에 대한 최상의 자료는 RailsCast입니다.

사용자 모델 (당신을 위해 사람) : (당신을 위해 관계)

has_many :friendships 
has_many :friends, :through => :friendships 
has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id" 
has_many :inverse_friends, :through => :inverse_friendships, :source => :user 

우정 모델 :

belongs_to :user 
belongs_to :friend, :class_name => "User" 
+0

자체 참조'has_many : through' 실제로 길을 가야하는 것입니다. – meagar

+0

내 총 친구는 inverse_friends + 친구입니까? –

관련 문제