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

sno*_*gel 4 ruby-on-rails

这个:

    - book.prices.order(:currency_code).each do |price|
Run Code Online (Sandbox Code Playgroud)

按货币代码按字母顺序返回所有书籍的价格:

AUD 19.99 
GBP 9.99 
NZD 26.00 
USD 14.95
Run Code Online (Sandbox Code Playgroud)

现在,我怎么能巧妙地让GBP始终出现在列表的顶部,其他人按字母顺序排序,如下所示:

GBP 9.99 
AUD 19.99 
NZD 26.00 
USD 14.95
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*n M 10

由于订购通常在数据库级别完成,因此只需在rails中使用SQL解决方案:

- book.prices.order("`currency_code` = 'GBP' desc, currency_code").each do |price|
Run Code Online (Sandbox Code Playgroud)

您可以在Rails(ActiveRecord)查询方法中使用sql代码段.
根据您的数据库,您可能必须选择正确的SQL解决方案

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

适用于您的情况.
您可以在rails console以下位置检查生成的sql :

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

并检查,它是否适用于您的数据库.

另一种方法是添加额外的列进行排序,这样你甚至可以将commonwelth货币放在别人面前等.