Ruby on rails 使用ActiveRecord按字母顺序排列最高的10个项目

Ruby on rails 使用ActiveRecord按字母顺序排列最高的10个项目,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有下面的语句返回10个最高的项目 Timesheet.joins(:project).select('projects.name as name, SUM(value) AS Minutes').group('projects.name').order('Minutes DESC').limit(10) 我如何按字母顺序排列?我尝试将.order('name')放在语句后面,但这不起作用。您可以像这样使用Enumerable\sort\u by方法 Timesheet.joins(:pro

我有下面的语句返回10个最高的项目

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

我如何按字母顺序排列?我尝试将.order('name')放在语句后面,但这不起作用。

您可以像这样使用
Enumerable\sort\u 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\u by
添加请求的额外排序级别。

您是否尝试过以“sort\u by(&:name)”结尾?它不会在查询中排序,而是使用ruby Enumerable#sort_by。(对不起,我的手机键盘上没有回音)试试:
Timesheet.joins(:project)。选择('projects.name作为project\u name,SUM(value)作为minutes')。分组('projects.name')。顺序(:project\u name=>:asc,:minutes=>:desc)。限制(10)
@enginersmnky很好,可以,如果你把它添加为答案,我会这样标记的。Surya这样做不起作用,因为它将生成一个查询,该查询不会按值取最高的10个项目,而是按字母顺序取前10个。