Come scrivere questo SQL in MetaWhere?
-
27-10-2019 - |
Domanda
Come vorrei scrivere questa query utilizzando MetaWhere (in 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'
Sto cercando di aggiungere un metodo alla classe myUser
chiamato buddies
che restituirà sia friends
e inverse_friends
da questo Railscast su autoreferenziale associazione .
Apprezzerei tutto l'aiuto!
EDIT: voglio essere in grado di interrogare sul set restituito, in modo tale che posso fare:
def is_a_buddy_of?(user)
not self.buddies.where(:friend_id >> user.id).empty?
end
SOLUZIONE: Nevermind che ultima modifica, Ho appena modificato il mio metodo is_a_buddy_of?(user)
a questo, utilizzando l'operatore |
sulle associazioni esistenti:
def is_a_buddy_of?(user)
status = false
self.buddies.map do |buddy|
status = true if buddy.id == user.id
end
status
end
Soluzione
perché non basta fare il seguente nel modello User:?
def buddies
inverse_friends | friends
end
|
è l'operatore di unione.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow