如何在ActiveRecord中建模朋友关系



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

Class People
  id
  name
Class Relationship
  id
  person_a_id
  person_b_id
  relationship_type

现在,假设我们有一些People数据(记录id = 1,2,3,4,5),关系表可能是这样的:

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

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

我想我可以用一些自我参照关联来做到这一点,但我认为有一种更干净的方法。我是不是错过了什么,还有宝石在那里等着满足我的每一个需求(至少就这个问题而言)?或者我必须写一个。

自引用关联是这里的方法。

在我看来,关于这个主题最好的资源是这个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

友情模型(Relationship for you):

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

最新更新