Rails:查询按数字排序记录,除了0
我正在根据优先级(升序)排列数据,其中在优先级中忽略’0’。
下面是Rails查询:
Profile.where(active: true).order(:priority).pluck(:priority)
此查询返回一个有序的记录列表,其优先级从“0”开始
[0, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 7]
您可以帮我弄清楚如何订购数据,其中在查询中添加了带有“0”的记录,如下例所示。
Example: [1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 7, 0]
您可以将字符串传递给#order
以使用原始SQL,因此您可以说:
Profile.where(active: true) .order('case priority when 0 then 1 else -1 end, priority') .pluck(:priority)
强制优先级零条目到最后。 您不必使用1
和-1
作为数字当然,您可以使用任何可读的内容并按正确的顺序排序,您甚至可以使用字符串(假设它们当然排序正确):
.order("case priority when 0 then 'last' else 'first' end, priority")