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可以执行此操作吗?
答案 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