Рельсы activerecord, дружеские отношения + inverse_friend отношения, как получить взаимоотношения? код включен
Пытаясь найти взаимоотношения, В отношениях с друзьями, Уже есть друзья и inverse_friends. Но как их объединить, чтобы получить общих друзей? Не могу понять, я попробовал несколько вариантов и долго искал в Интернете, просто не вижу
has_many :friendships
has_many :friends, :through => :friendships
has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id"
has_many :inverse_friends, :through => :inverse_friendships, :source => :user
как получить
has_many :mutual_friends ?
3 ответа
Решение
Я не думаю, что вы можете определить взаимную ассоциацию друзей. Итак, давайте посмотрим на метод или область действия класса общих друзей.
Я предполагаю, что мы хотим всех наших друзей, для которых мы их друзья.
class User
has_many :friendships
has_many :friends, :through => :friendships
has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id"
has_many :inverse_friends, :through => :inverse_friendships, :source => :user
def mutual_friends
inverse_friends.joins(:friendships).where("friendships.user_id = users.id and friendships.friend_id = :self_id", :self_id => id).all
end
end
Чтобы сделать это как ассоциацию, это то, что вы пытаетесь сделать:
has_many :mutual_friends,
:through => :inverse_friendships,
:source => :user,
:conditions => ["friendships.user_id = users.id and friendships.friend_id = :self_id", :self_id => id]
Проблема заключается в вызове метода id в определении ассоциации has_many: altern_friends.
Вам нужны две модели, чтобы найти общих друзей?
Не могли бы вы просто сделать
@mutualfriends = @user1.friends & @user2.friends
Попробуйте пересечение двух запросов вот нить об этом