1

试图找到相互关系,在朋友关系中,已经有朋友和逆朋友。但是如何结合它们来获得共同的朋友呢? 似乎无法弄清楚我尝试了几个选项并在网上搜索了很长时间,只是没有看到它

  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 ?
4

3 回答 3

5

你需要两个模型来找到共同的朋友吗?

你不能就这样吗

@mutualfriends = @user1.friends & @user2.friends
于 2012-09-17T23:08:35.000 回答
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 方法调用。

于 2012-09-17T23:02:42.103 回答
2

尝试两个查询的交集这里是一个关于那个的线程

两个关系的交集

于 2012-09-17T23:14:31.120 回答