このSQLをMetawhereで書く方法は?
-
27-10-2019 - |
質問
このクエリを使用してどのように記述しますか メタホア (レール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
それは両方を返します friends
と inverse_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
|
ユニオンオペレーターです。
所属していません StackOverflow