我有一个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"