2013-07-14 41 views
2

這一個值:順序按字母順序,但在頂部

- 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 

This answer顯示了SQL解決方案,但我不確定Rails的方式。

回答

7

由於訂貨通常在數據庫級別上完成的,只需使用SQL解決方案在軌道:

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

您可以在滑軌(ActiveRecord的)查詢方法使用SQL片段。
根據您的數據庫,你可能需要選擇正確的SQL solutiuon,所以大概

- 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 

和檢查,是否它在你的DB。

的另一種方式是原因添加一個額外的列進行排序,這樣你甚至可以在別人等

+0

感謝您的面前放置commonwelth貨幣 - 現在,這是我的解析可以看出,SQL解決方案實際上不工作。我只是按照字母順序排列列表,頂部沒有英鎊。 – snowangel

+0

嘗試其他SQL解決方案,它們依賴於DB品牌。我更新了我的答案。 –

+0

輝煌 - 拿出狡猾的「城市」,第二個答案精美地運作。謝謝。 – snowangel