Есть два сценария и две разные реализации:
Модель «Друзья».
Допустим, у одного 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
Это говорит рельсам, что у каждого пользователя может быть много followers
, которые являются массивом других объектов User
, и этот пользователь доступен другим как объект в массиве following
. Например, если @user2
следует за @user1
, это будет выглядеть так:
@user1.followers
#=> [@user2, @user3]
@user2.following
#=> [@user1]
person
Sheharyar
schedule
25.05.2015