我正在尝试与同一模型实现has_and_belong_to_many
关系,但我不知道如何。
例如,用户应该能够关注其他用户。
此外,我在该模型中有多个相同模型的字段;我怎么能给它另一个名字?
答案 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]