GROUP_BY内的活动记录限制

时间:2012-02-10 22:48:48

标签: sql ruby-on-rails activerecord sqlite group-by

SCENARIO 我有一张桌子上摆满了用户表的帖子。 我希望能够获取所有帖子并按用户对其进行分组,但我希望为每个用户设置10个限制。

class Post < ActiveRecord::Base
    belongs_to :user
end

class User < ActiveRecord::Base
    has_many :posts
end

# I thought this might work but it just grabs the first 10 posts and groups them
Post.find(:all, :limit=>10).group_by(&:user)

有什么想法?我是否必须编写自定义SQL或Active Record可以执行此操作吗?

2 个答案:

答案 0 :(得分:0)

喜欢什么?

Post.group(:user_id).limit(10)

答案 1 :(得分:0)

Post.group(:user_id).limit(10)

group_by不是查询方法,而是Enumerable的方法。

在您的代码中,Post.find(:all, :limit => 10)在传递给Array之前会变为group_by。上面的方法将查询方法链接在一起,只在需要使用时将它们转换为Array

ActiveRecord处理整个事情。上述方法转换为

SELECT `posts`.* FROM `posts` GROUP BY user_id LIMIT 10