¿Cómo escribir este SQL en Metawhere?
-
27-10-2019 - |
Pregunta
¿Cómo escribiría esta consulta usando Metawhere (en 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'
Estoy tratando de agregar un método en miUser
clase llamó buddies
que devolverá ambos friends
y inverse_friends
de esto RailScast en asociación autorreferencial.
¡Agradecería cualquier ayuda!
Editar: quiero poder consultar en el conjunto devuelto, de modo que pueda hacer:
def is_a_buddy_of?(user)
not self.buddies.where(:friend_id >> user.id).empty?
end
Solución: no importa esa última edición, acabo de modificar mi is_a_buddy_of?(user)
Método para esto, utilizando el |
operador en mis asociaciones existentes:
def is_a_buddy_of?(user)
status = false
self.buddies.map do |buddy|
status = true if buddy.id == user.id
end
status
end
Solución
¿Por qué no solo haces lo siguiente en tu modelo de usuario?:
def buddies
inverse_friends | friends
end
|
es el operador sindical.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow