2014-09-20 60 views
0

我有以下语句返回10个最高项目。使用ActiveRecord按字母顺序对10个最高项目进行排序

Timesheet.joins(:project).select('projects.name as name, SUM(value) AS Minutes').group('projects.name').order('Minutes DESC').limit(10) 

如何按字母顺序排列它们?我试图在声明后面放置.order('name'),但这不起作用。

+1

你试过用“sort_by(&:name)”结束这个吗?它不会在查询中排序,而是使用ruby Enumerable#sort_by排序。 (对不起,没有在我的手机键盘上打勾) – engineersmnky 2014-09-20 01:20:25

+0

Try:'Timesheet.joins(:project).select('projects.name as project_name,SUM(value)AS minutes')。group('projects.name')。order (:project_name =>:asc,:minutes =>:desc).limit(10)' – Surya 2014-09-20 06:14:36

+0

@engineersmnky很好,如果你把它作为答案添加,我会将它标记为这样。 Surya不起作用,因为它会产生一个查询,不会按照价值取10个最高项目,而只是按字母顺序排列的前10个项目。 – rept 2014-09-20 09:52:19

回答

2

可以使用Enumerable#sort_by方法,像这样

Timesheet.joins(:project). 
    select('projects.name as name, SUM(value) AS Minutes'). 
    group('projects.name'). 
    order('Minutes DESC'). 
    limit(10). 
    sort_by(&:name) 

这将运行原来的查询,然后使用sort_by添加排序要求的级别。

相关问题