有两种场景和两种不同的实现方式:
“朋友”模型
假设一个User 可以有多个:friends,其中每个朋友也是User 模型的对象。你可以这样做:
has_and_belongs_to_many :friends, class_name: 'User'
这告诉 Rails 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]