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
¿Fue útil?

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
scroll top