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")