Ruby on rails 如何对ActiveRecord查询中作为哈希返回的数据进行排序?

Ruby on rails 如何对ActiveRecord查询中作为哈希返回的数据进行排序?,ruby-on-rails,ruby,sorting,activerecord,Ruby On Rails,Ruby,Sorting,Activerecord,我有一个疑问: Model.where( 'user_id = ? AND created_at > ? AND created_at < ?', current_user.id, date1, date2 ).group(:something1).count 根据我需要得到的最高值: {264=>2, 257=>1} 我可以在循环中对数据进行排序,但这不是很有效。是否有任何方法可以直接从查询中获取已排序的数据?或者,有没有比Ruby循环更有效的方法对日期进行

我有一个疑问:

Model.where(
  'user_id = ? AND created_at > ? AND created_at < ?',
  current_user.id, date1, date2
).group(:something1).count
根据我需要得到的最高值:

{264=>2, 257=>1}

我可以在循环中对数据进行排序,但这不是很有效。是否有任何方法可以直接从查询中获取已排序的数据?或者,有没有比Ruby循环更有效的方法对日期进行排序?

您可以在生成的哈希上使用
sort\u by
,例如:

Model.where('user_id = ? AND created_at > ? AND created_at < ?', current_user.id, date1, date2).group(:something1).count.sort_by { |k, v| v }
Model.where('user_id=?和created_at>?和created_at<?',当前的_user.id,date1,date2)。group(:something1)。count.sort_by{| k,v | v}

您可以使用。我认为这是SQL问题。这不是SQL问题,而是活动记录查询问题。感谢Chris的帮助,我尝试过使用它,但得到的结果相同-数据未按最高值排序。请尝试更改用于排序的值。所以,{k,v|k}不幸的是仍然是一样的。
。按{k,v|k}排序。反向
是解决方案。谢谢,我会接受你的回答。使用
order\u by
子句可能是最好的解决方案。它会告诉DBM在将结果返回Ruby之前对结果进行排序。如果您的查询返回10000条记录,
order\u by
意味着您可以对它们进行迭代,并且它们将按照您需要的顺序排列。使用
sort\u by
将迫使Ruby做额外的工作,不必要地降低代码的速度。数据库引擎经过优化,可以非常快速地对结果进行排序;这是我们使用它们的原因之一。
Model.where('user_id = ? AND created_at > ? AND created_at < ?', current_user.id, date1, date2).group(:something1).count.sort_by { |k, v| v }