按字母顺序排序,但有一个值位于顶部。

8
这是:

    - book.prices.order(:currency_code).each do |price|

按货币代码字母顺序排列,返回所有书籍价格:
AUD 19.99 
GBP 9.99 
NZD 26.00 
USD 14.95

现在,我该如何使英镑始终出现在列表顶部,并按字母顺序排列其他货币,就像这样:
GBP 9.99 
AUD 19.99 
NZD 26.00 
USD 14.95

这个答案展示了SQL的解决方案,但我不确定Rails的方式。

1个回答

14

由于通常是在数据库层面上完成排序,因此在Rails中只需使用SQL解决方案:

- book.prices.order("`currency_code` = 'GBP' desc, currency_code").each do |price|

你可以在Rails (ActiveRecord)查询方法中使用SQL片段。
根据你的数据库,你可能需要选择合适的SQL解决方案,所以大概是这样。

- book.prices.order("CASE WHEN currency_code = 'GBP' THEN 1 ELSE 2 END, currency_code").each do |price|

适用于您的情况。
您可以在rails console中检查生成的SQL:

book.prices.order("CASE WHEN currency_code = 'GBP' THEN 1 ELSE 2 END,  currency_code").to_sql

检查一下它是否在你的数据库中工作。

另一种方法当然是添加一个额外的列进行排序,这样你甚至可以将通用的货币放在其他货币之前等。


谢谢你的回复 - 现在我可以看到解析了,SQL解决方案实际上并不起作用。我只是得到一个按字母顺序排序的列表,没有英镑排在最前面。 - snowangel
尝试其他的SQL解决方案,它们依赖于数据库品牌。我更新了我的答案。 - Martin M
太棒了 - 去掉有问题的“city”和第二个答案就完美了。谢谢。 - snowangel
城市已删除,(这是复制粘贴留下的,请忽略) - Martin M
1
太好了!这也帮助了我。@MartinM 非常感谢。 - Mano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接