试图找到相互关系,在朋友关系中,已经有朋友和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 ?
答案 0 :(得分:5)
你需要两种模式才能找到共同的朋友吗?
你能不能做到
@mutualfriends = @user1.friends & @user2.friends
答案 1 :(得分: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]
问题在于has_many:mutual_friends关联定义中的id方法调用。
答案 2 :(得分:2)
尝试两个查询的交集,这是一个关于那个
的线程