如何在ActiveRecord中建模朋友关系

Ric*_*urt 2 activerecord ruby-on-rails

我有一个People模型,我想允许非定向关系(朋友,家人,邻居等)当你将一个人标记为另一个人的朋友时,他们都是彼此的朋友.

Class People
  id
  name

Class Relationship
  id
  person_a_id
  person_b_id
  relationship_type
Run Code Online (Sandbox Code Playgroud)

现在,假设我们有一些People数据(记录ID = 1,2,3,4,5),这就是Relationship表的外观:

id  person_a_id  person_b_id  relationship_type
--  -----------  -----------  --------------------
 1     1            2           friend
 2     1            3           neighbor
Run Code Online (Sandbox Code Playgroud)

这告诉我的是,人1有一个朋友(人2)和一个邻居(人3).它还告诉我,Person 2有一个朋友(Person 1),Person 3有一个邻居(Person 1).

我想我可以通过一些自我指导协会做到这一点,但我认为有一种更清洁的方式.我错过了什么,那里有一颗宝石,等着满足我的每一个需求(至少就这个问题而言)?或者我必须写一个......

Eva*_*ell 5

自我指涉协会是前往这里的方式.

在我看来,这个主题的最佳资源就是这个RailsCast.

用户模型(Person for you):

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
Run Code Online (Sandbox Code Playgroud)

友谊模特(你的关系):

belongs_to :user
belongs_to :friend, :class_name => "User"
Run Code Online (Sandbox Code Playgroud)