8

这个:

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

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

AUD 19.99 
GBP 9.99 
NZD 26.00 
USD 14.95

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

GBP 9.99 
AUD 19.99 
NZD 26.00 
USD 14.95

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

4

1 回答 1

14

由于排序通常在 DB 级别完成,因此只需使用 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|

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

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

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

另一种方法是添加一个额外的列进行排序,这样你甚至可以将英联邦货币放在其他人的前面等。

于 2013-07-14T09:09:46.650 回答