Ruby on rails 使用ActiveRecord按字母顺序排列最高的10个项目
我有下面的语句返回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
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个。