我有一个Project
模型,其属性为status
。
status
可以保存为以下值之一:Ongoing
,Completed
,Scheduled
。
是否可以订购记录,使status
值为Scheduled
的人排在第一位,Ongoing
秒和Completed
排在最后?
第二个订单子句将按时间顺序在每个状态段中对项目进行排序。
答案 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。