可以通过某些单词订购?

时间:2013-12-27 13:34:28

标签: ruby-on-rails ruby-on-rails-4 sql-order-by

我有一个Project模型,其属性为status

status可以保存为以下值之一:OngoingCompletedScheduled

是否可以订购记录,使status值为Scheduled的人排在第一位,Ongoing秒和Completed排在最后?

第二个订单子句将按时间顺序在每个状态段中对项目进行排序。

3 个答案:

答案 0 :(得分:3)

这将按照您的要求返回status列所排序的记录:

Project.order('case projects.status
  when 'Scheduled' then 0
  when 'Ongoing' then 1
  when 'Completed' then 2
end')

答案 1 :(得分:1)

order与自定义表达式一起使用:

CASE status
  WHEN 'Ongoing' THEN 3
  WHEN 'Completed' THEN 2
  WHEN 'Scheduled' THEN 1
  ELSE 0
END DESC

答案 2 :(得分:0)

您需要where方法。有什么影响:

Project.all.order('updated_at').group('status')

请小心,因为group返回了一个哈希值,因此它可能无法完全按照您的预期运行。可以找到文档here