如何在ActiveRecord中建模朋友关系

时间:2011-09-14 02:13:44

标签: ruby-on-rails activerecord

我有一个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做到这一点,但我认为有一种更清洁的方式。我错过了什么,那里有一颗宝石,等着满足我的每一个需求(至少就这个问题而言)?或者我必须写一个......

1 个答案:

答案 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"
相关问题