Rails:查询按数字排序记录,除了0

时间:2017-10-31 17:41:49

标签: ruby-on-rails rails-activerecord

我正在根据优先级(升序)排列数据,在优先级中忽略'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]

1 个答案:

答案 0 :(得分:2)

您可以将字符串传递给#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")