如果你想有一個連接表,你可以創建Friendships
與friend_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
的朋友。
什麼是朋友課?不是朋友也是用戶?在任何情況下,自引用表都在Rails文檔中討論。 –
看看http://railscasts.com/episodes/163-self-referential-association?view=asciicast – sled
我一直在看它 –