2015-10-05 35 views
1

所以我有一個模型UserFriends如何在Rails中爲朋友創建關係模型?

問題是,我想user.friends顯示所有的朋友,無論用戶A friended用戶B或用戶B friended A.

我以爲我可以創造這樣的事情

朋友 belongs_to的:用戶 belongs_to的:用戶

所以這將是一個簡單的用戶之間的連接表,但我可以看到這是不可能的。

我可以創建2列ID_A,ID_B表,然後在模型做has_many :friends, :through=> :id_a or :id_b

+2

什麼是朋友課?不是朋友也是用戶?在任何情況下,自引用表都在Rails文檔中討論。 –

+0

看看http://railscasts.com/episodes/163-self-referential-association?view=asciicast – sled

+0

我一直在看它 –

回答

0

如果你想有一個連接表,你可以創建Friendshipsfriend_a_id列和friend_b_id和定義以下關係要做到這一點:

User

has_many(
    :a_friendships, 
    class_name: "Friendship", 
    foreign_key: :friend_a_id, 
    primary_key: :id 
) 
has_many(
    :b_friendships, 
    class_name: "Friendship", 
    foreign_key: :friend_b_id, 
    primary_key: :id 
) 
has_many :friend_as, through: :b_friendships, source: :friend_a 
has_many :friend_bs, through: :a_friendships, source: :friend_b 
def friends 
    friend_as + friend_bs 
end 

Friendship

belongs_to :user 
belongs_to(
    :friend_a, 
    class_name: "User", 
    foreign_key: friend_a_id, 
    primary_key: :id 
) 
belongs_to(
    :friend_b, 
    class_name: "User", 
    foreign_key: friend_b_id, 
    primary_key: :id 
) 

user.friends將返回包含友情列表中包含該用戶的所有用戶的活動記錄。這是通過收集所有friend_b在友誼中的作用,其中用戶爲friend_a,反之亦然。

這是假設你並不是說你有一個Friend模型,而是每個User可以成爲另一個User的朋友。