如何按最近的帖子排序用户?

问题描述:

我有两个型号:UserPost其中有user_id列(外键)和created_at列。如何按最近的帖子排序用户?

我想按最近的帖子对用户进行排序。例如,如果:

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 

的结果应该是:

user_id = 2 
user_id = 1 
user_id = 3 

你将如何在Rails 3中实现这一目标?

应该是这样的:

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

这是错误的。例如,如果有3个用户,并且每个用户有一个帖子,User.joins(:posts).size'将是10,而不是3. – 2011-05-22 14:07:43

+0

你是对的,对不起,寻找更好的东西;) – apneadiving 2011-05-22 14:13:01

+0

这几乎是正确的。按照Denis的建议,在我将其改为'order(“max(created_at)DESC”)后,看起来好像有一个窍门。尽管如此,我仍然不确定没有'max'就能完成什么样的排序...... – 2011-05-22 14:47:48

不知道的回报率的一部分,但你正在寻找到一个组由声明:

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

如果您想通过最新帖子排序你可以依靠的事实,具有最大id行是最新:

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

这样您可以使用id列上的现有主键索引(并避免在created_at列中添加新索引)。