我可以使用DataMapper(不使用原始SQL)按子记录计数对记录进行排序吗?

我可以使用DataMapper(不使用原始SQL)按子记录计数对记录进行排序吗?,sql,datamapper,Sql,Datamapper,我想做的事情对我来说是非常基本的,但我没有找到一种不用原始SQL就使用DataMapper的方法。这看起来像: select u.id, u.name, count(p.id) as post_count from posts p inner join users u on p.user_id = u.id group by p.user_id order by post_count desc; 上述查询的目的是向我显示所有用户,这些用户按每个用户的帖子数量排序。我发现使用DataMapper

我想做的事情对我来说是非常基本的,但我没有找到一种不用原始SQL就使用DataMapper的方法。这看起来像:

select u.id, u.name, count(p.id) as post_count
from posts p
inner join users u on p.user_id = u.id
group by p.user_id
order by post_count desc;

上述查询的目的是向我显示所有用户,这些用户按每个用户的帖子数量排序。我发现使用DataMapper最接近的方法是
aggregate
,它不会返回资源对象。我想要的是某种方法来生成一个查询并取回标准的DM对象。

假设您有关系

has_n, :posts
你应该能做到

User.get(id).posts.count

您还可以链接条件

User.get(1).posts.all(:date.gt => '2012-10-01')
请参见此处的范围和链接

最后添加排序

User.get(1).posts.all(:order => [:date.desc])

我很感激你的回答;但除非我遗漏了什么,否则这不会告诉我如何按子记录计数排序,是吗?这基本上是我的问题,也就是说,根据你的例子,我如何让所有用户按每个用户的帖子排序?(可能类似于
User.all(:order=>{:posts=>:count})
或类似的东西,尽管这显然不起作用。)如果您在用户对象中跟踪post count,这是很容易做到的。User.all(:order=>{:post_count.desc})。这在你的数据库上可能更容易,当你添加一篇文章时,你只需要增加。我同意这将是微不足道的,在数据库上可能更容易。然而,我不认为(通过适当的索引)它真的会对性能产生重大影响;更重要的是,我不希望仅仅为了适应特定的ORM而被迫进行特定的数据库设计!这看起来有点倒退吗?您可能可以执行User.get(1).posts.all(:fields=>[:User_id]),这将要求您在post模型中嵌入用户id,而不是使用资源表:字段按触发分组
User.get(1).posts.all(:date.gt => '2012-10-01')
User.get(1).posts.all(:order => [:date.desc])