Comment écrire ce SQL dans MetaWhere?
-
27-10-2019 - |
Question
Comment puis-je écrire cette requête en utilisant MetaWhere (dans Rails 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'
Je suis en train d'ajouter une méthode sur User
appelée classe mybuddies
qui retournera les deux friends
et inverse_friends
de cette Railscast sur l'association autoréférentielle .
Je vous en serais reconnaissant toute aide!
EDIT: Je veux être en mesure de requête sur l'ensemble de retour, de sorte que je peux faire:
def is_a_buddy_of?(user)
not self.buddies.where(:friend_id >> user.id).empty?
end
SOLUTION: Peu importe que la dernière modification, je viens de ma méthode modifié is_a_buddy_of?(user)
à cela, en utilisant l'opérateur |
sur mes associations existantes:
def is_a_buddy_of?(user)
status = false
self.buddies.map do |buddy|
status = true if buddy.id == user.id
end
status
end
La solution
pourquoi ne faites-vous pas tout ce qui suit dans votre modèle d'utilisateur:
def buddies
inverse_friends | friends
end
|
est l'opérateur syndical.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow