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

共通の友達を見つけるには 2 つのモデルが必要ですか?

できませんでしたか

@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

2 つのクエリの交差を試してください。ここにそれに関するスレッドがあります。

2 つの関係の交点

于 2012-09-17T23:14:31.120 に答える