这个:
- 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货币放在别人面前等.
| 归档时间: |
|
| 查看次数: |
1040 次 |
| 最近记录: |