2010-11-27 6 views
6

Estoy tratando de unir dos tablas y devolver todas las columnas, no solo las asociadas con el modelo.Rails 3 Devolución de todas las columnas de un join

que tienen algo así como que tiene este aspecto:

Comment.joins(:user).select("*") 

El SQL se ve bien, pero aún así, sólo devuelve los comentarios y ninguno de la información de usuario asociada a ella.

¿Cómo puedo recuperar * y no solo comments.*?

Respuesta

7

¿Qué hay de

comments = Comment.includes(:user).all 

Ahora comments va a ser una matriz por lo que tendrá que recorrer para ver todos los usuarios.

#won't work 
comments.user 

#should work 
comments[0].user 

comments.each do |comment| 
    puts comment.user.name #or whatever 
end 
+0

Todavía no se puede obtener la información del usuario para mostrar. Dirígete a Mishka y ayúdame con esto;) – Dex

+0

Nice Davis reference. – rwilliams

+0

He estado despierto por mucho tiempo;). Esto funciona. Quería asegurarme de que todo estuviera siendo cargado con entusiasmo. – Dex

1

Comment.select ('*') incluye. (: Usuario)

+0

derecha - No estaba segura de si estaban preocupados por SQL o simplemente obtener los datos de nuevo. En este caso, obtiene los comentarios y los usuarios de vuelta sin tener que volver a la base de datos. – Cory

+0

Simplemente haga Comment.select ("Comentarios. *, Usuarios. *") – Cory

2

esto debería funcionar:

comments = Comment.joins(:user).includes(:user) 

Pero esto es lo que creo que está pasando, si está viendo la salida en la consola Windows, creo que la salida de la consola solo refleja/inspecciona el objeto de nivel raíz que se devuelve.

Acabo de hacer un experimento en el que ejecuté el código anterior. La salida del terminal registró que obtuvo los comentarios pero no mencionó al usuario asociado. A continuación, apago la base de datos para que no se pueda ejecutar una segunda consulta en la base de datos, luego solicite el usuario asociado, p.

comments.user 

La salida de la consola del usuario, lo que demuestra que ya se ha cargado con impaciencia, ya que no se intentó realizar la conexión de base de datos.

+0

Interesante. Me preguntaba lo mismo. Aunque el almacenamiento en caché de las consultas puede hacer que sea confuso, también es posible que observe si se activa o no una consulta cuando ejecuta 'comments.user'. – wuliwong

Cuestiones relacionadas