rails activerecord,friend relation + inverse_friend关系如何获得相互关系?代码包括在内

时间:2012-09-17 22:44:15

标签: ruby-on-rails activerecord mutual-friendship

试图找到相互关系,在朋友关系中,已经有朋友和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 个答案:

答案 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)

尝试两个查询的交集,这是一个关于那个

的线程

Intersection of two relations