Has_and_belong_to_many与同一模型的关系

时间:2015-05-14 00:28:06

标签: ruby-on-rails ruby-on-rails-4 mongoid ruby-on-rails-4.2

我正在尝试与同一模型实现has_and_belong_to_many关系,但我不知道如何。

例如,用户应该能够关注其他用户。

此外,我在该模型中有多个相同模型的字段;我怎么能给它另一个名字?

1 个答案:

答案 0 :(得分:1)

有两种情况和两种不同的实施方式:

'朋友'模型

让我们说一个User可以有多个:friends,其中每个朋友也是User模型的对象。你可以这样做:

has_and_belongs_to_many :friends, class_name: 'User'

这告诉我们User类的对象可以与friends具有多对多关系。所以你可以这样打电话:

@user_a.friends
#=> [@user_x, @user_y, @user_z]  # Array of User Objects

@user_x.friends
#=> [@user_a, @user_b, @user_c]  # Array of User Objects

'粉丝/关注'模型

让我们说一个User可以跟随其他用户,其他用户也可以关注他。这就是你实现它的方式:

has_many   :followers, class_name: 'User', inverse_of: :following
belongs_to :following, class_name: 'User', inverse_of: :followers

这告诉rails每个用户可以拥有许多followers,这是其他User个对象的数组,并且该用户可以作为following数组中的对象访问其他用户。例如,如果@user2跟在@user1之后,它将如下所示:

@user1.followers
#=> [@user2, @user3]

@user2.following
#=> [@user1]