Ruby on rails 如何在Rails中为朋友创建关系模型?

Ruby on rails 如何在Rails中为朋友创建关系模型?,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,所以我有一个型号用户,和朋友 问题是我想user.friends显示所有好友,而不管用户A是好友用户B还是用户B是好友A 我想我可以创造这样的东西 朋友 属于:用户 属于:用户 因此,这将是一个简单的用户之间的连接表,但我可以看出这是如何不容易做到的 我可以创建一个包含两列id\u a、id\u b的表,然后在model dohas\u many:friends、:through=>:id\u a或:id\b中创建吗 如果要使用联接表执行此操作,可以使用列friend\u a\u id和frie

所以我有一个型号
用户
,和
朋友

问题是我想
user.friends
显示所有好友,而不管用户A是好友用户B还是用户B是好友A

我想我可以创造这样的东西

朋友 属于:用户 属于:用户

因此,这将是一个简单的用户之间的连接表,但我可以看出这是如何不容易做到的

我可以创建一个包含两列id\u a、id\u b的表,然后在model do
has\u many:friends、:through=>:id\u a或:id\b中创建吗

如果要使用联接表执行此操作,可以使用列
friend\u a\u id
friend\u b\u id
创建
友谊关系
,并定义以下关系:

用户上

has_many(
  :a_friendships, 
  class_name: "Friendship", 
  foreign_key: :friend_a_id, 
  primary_key: :id
)
has_many(
  :b_friendships, 
  class_name: "Friendship", 
  foreign_key: :friend_b_id, 
  primary_key: :id
)
has_many :friend_as, through: :b_friendships, source: :friend_a
has_many :friend_bs, through: :a_friendships, source: :friend_b
def friends
  friend_as + friend_bs
end
关于友谊:

belongs_to :user
belongs_to(
  :friend_a, 
  class_name: "User", 
  foreign_key: friend_a_id, 
  primary_key: :id
)
belongs_to(
  :friend_b, 
  class_name: "User", 
  foreign_key: friend_b_id, 
  primary_key: :id
)
user.friends
将返回一条活动记录,其中包含包含该用户的好友列表中的所有用户。这是通过收集用户为
friend\u a
的友谊中的所有
friend\u b
来实现的,反之亦然


这是假设你不是说你有一个
朋友
模型,但是每个
用户
都可以成为另一个
用户的朋友

如果您想使用联接表来实现这一点,您可以创建
友谊
朋友a\u id
朋友b\u id
,并定义以下关系:

用户上

has_many(
  :a_friendships, 
  class_name: "Friendship", 
  foreign_key: :friend_a_id, 
  primary_key: :id
)
has_many(
  :b_friendships, 
  class_name: "Friendship", 
  foreign_key: :friend_b_id, 
  primary_key: :id
)
has_many :friend_as, through: :b_friendships, source: :friend_a
has_many :friend_bs, through: :a_friendships, source: :friend_b
def friends
  friend_as + friend_bs
end
关于友谊:

belongs_to :user
belongs_to(
  :friend_a, 
  class_name: "User", 
  foreign_key: friend_a_id, 
  primary_key: :id
)
belongs_to(
  :friend_b, 
  class_name: "User", 
  foreign_key: friend_b_id, 
  primary_key: :id
)
user.friends
将返回一条活动记录,其中包含包含该用户的好友列表中的所有用户。这是通过收集用户为
friend\u a
的友谊中的所有
friend\u b
来实现的,反之亦然


这是假设你不是说你有一个
朋友
模型,而是说每个
用户
都可以是另一个
用户的朋友

什么是朋友类?朋友不也是用户吗?在任何情况下,Rails文档中都讨论了自引用表。看一下我一直在看的内容friend类是什么?朋友不也是用户吗?在任何情况下,Rails文档中都讨论了自引用表