我有一个People模型,我想允许非定向关系(朋友,家人,邻居等)当你将一个人标记为另一个人的朋友时,他们都是彼此的朋友。
Class People
id
name
Class Relationship
id
person_a_id
person_b_id
relationship_type
现在,假设我们有一些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
这告诉我的是,第1人有朋友(第2人)和邻居(第3人)。它还告诉我,Person 2有一个朋友(Person 1),Person 3有一个邻居(Person 1)。
我想我可以用一些Self-Referential Association做到这一点,但我认为有一种更清洁的方式。我错过了什么,那里有一颗宝石,等着满足我的每一个需求(至少就这个问题而言)?或者我必须写一个......
答案 0 :(得分: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
友谊模型(与你的关系):
belongs_to :user
belongs_to :friend, :class_name => "User"