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 スニペットを使用できます。
DB によっては、適切な 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

DBで機能するかどうかを確認します。

もう 1 つの方法は、並べ替え用の列を追加することです。この方法では、コモンウェルスの通貨を他の通貨の前に配置することもできます。

于 2013-07-14T09:09:46.650 に答える