質問

このクエリを使用してどのように記述しますか メタホア (レール3)?

SELECT "users".* FROM "users" 
INNER JOIN "friendships" friends 
   ON "users"."id" = friends."friend_id" 
INNER JOIN "friendships" inverse_friends 
   ON "users"."id" = inverse_friends."user_id" 
WHERE friends."user_id" = 4 
   AND friends."status" = 't' 
   AND inverse_friends."friend_id" = 4 
   AND inverse_friends."status" = 't'

私は自分にメソッドを追加しようとしていますUser クラスと呼ばれます buddies それは両方を返します friendsinverse_friends これから 自己参照協会のRailscast.

どんな助けにも感謝します!


編集:返されたセットでクエリをすることができるようになりたいので、できるようになります。

def is_a_buddy_of?(user)
  not self.buddies.where(:friend_id >> user.id).empty?
end

解決策:その最後の編集を決して気にせず、私はちょうど私を変更しました is_a_buddy_of?(user) これの方法、を使用して | 私の既存の協会のオペレーター:

def is_a_buddy_of?(user)
  status = false
  self.buddies.map do |buddy|
    status = true if buddy.id == user.id
  end
  status
end
役に立ちましたか?

解決

ユーザーモデルで次のことをしてみませんか?:

def buddies
  inverse_friends | friends
end

| ユニオンオペレーターです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top