2011-05-22 18 views
5

Tengo dos modelos: User, y Post que tiene user_id columna (clave externa) y created_at columna.¿Cómo ordenar los usuarios por la publicación más reciente?

Me gustaría ordenar los usuarios por la publicación más reciente. Por ejemplo, si:

user_id = 1, created 3 posts at: 17/05/2011, 19/05/2011, 21/05/2011 
user_id = 2, created 1 post at: 22/05/2011 
user_id = 3, created 2 posts at: 18/05/2011, 20/05/2011 

el resultado debería ser:

user_id = 2 
user_id = 1 
user_id = 3 

¿Cómo puede lograr esto en Rails 3?

Respuesta

1

debe ser algo como:

Post.select(:user_id).group(:user_id).order("created_at DESC") 
+1

Eso está mal. Si, por ejemplo, hay 3 usuarios y cada usuario tiene una publicación, 'User.joins (: posts) .size' será 10, en vez de 3. –

+0

tienes razón, lo siento, buscando algo mejor;) – apneadiving

+0

Eso es casi correcto. Después de cambiar esto a 'orden (" max (created_at) DESC ")', como sugirió Denis, parece que funciona. Sin embargo, todavía no estoy seguro de qué tipo de clase se hace sin el 'máximo' ... –

2

No estoy seguro sobre la parte RoR, pero usted está buscando en un grupo por la declaración:

select user_id, max(created_at) as created_at 
from posts 
group by user_id 
order by max(created_at) desc 
1

Si desea ordenar último mensaje puede confiar en el hecho de que una fila con el mayor id es la última:

Post.select(:user_id).group(:user_id).order("MAX(id) DESC") 

esta manera puede usar el índice de clave principal existente en la columna id (y evitar tener que agregar un nuevo índice en la columna created_at).

Cuestiones relacionadas