2011-12-18 25 views
8

Necesito consultar todas las publicaciones de un usuario específico e incluir todos los comentarios y el usuario que pertenece al comentario.Rails incluye relaciones anidadas

class User < ... 
    has_many :posts 
    has_many :comments 
end 

class Post < ... 
    belongs_to :user 
    has_many :comments 
end 

class Comment < ... 
    belongs_to :user 
    belongs_to :post 
end 

@posts = current_user.posts.include(:comments) 

¿Es posible obtener el usuario de los comentarios? Enumero una gran cantidad de publicaciones y comentarios. No quiero consultar a cada usuario de comentarios.

Thx/Tobias

Respuesta

26

Trate

@posts = current_user.posts.includes(:comments => :user) 

leer mas sobre esto here

+1

¿Es posible limitar el comentario en esta consulta. Solo quiero que se incluyan los 5 últimos comentarios. Si bucle shout.comments.limit (5) se ejecuta una nueva consulta – sandelius

+1

En mi respuesta: 'Publicar has_many: comments,: include => [: user],: limit => 5' – clyfe

+0

Sí, pero también quiero para buscar todos los comentarios en una página, o incluso paginarlos? – sandelius

10

¿Qué tal se incluyen en la sentencia de definición de relación?

: incluyen
Especificar asociaciones de segundo orden que deben estar ansiosos cargado cuando se carga este objeto.

class Post < 
    belongs_to :user 
    has_many :comments, :include => [:user], :limit => 5 
end 
+1

Parece que: incluir no es una opción válida (al menos no con Rails 4.1), ¿hay alguna alternativa? – FeifanZ

+0

@FeifanZ debe ser 'includes'. Debería funcionar bien entonces – ahnbizcad