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 dohas\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文档中都讨论了自引用表