雑草SEの備忘録

東大を卒業し、SEとして働くことになった。備忘録的に作業を綴る。

ActiveRecordで任意の配列の順番で並び替えする方法

ActiveRecord(というかSQL)において、idや特定のカラムの指定順に並べ替えるのは容易いが、任意の配列の順番にならべたいときがある。その場合の方法について記載する。

まずはデータの準備から。以下のようにplansテーブルにレコードを追加したとする。

Plan.create!(key: 'aaaaaa')
Plan.create!(key: 'bbbbbb')
Plan.create!(key: 'cccccc')
Plan.create!(key: 'eeeeee')

bbbbbb→cccccc→aaaaaa→eeeeeeの順番で並び替えたいとする。
まずは配列を準備。

order_plan_keys = %w[
  bbbbbb
  cccccc
  aaaaaa
  eeeeee
]

以下のようにActiveRecordを組み立てる。

Plan.where(key: ordered_plan_keys).order(
  ordered_plan_keys.map { |key| "\"plans\".\"fee_plan_code\" = '#{key}' desc" }.join(", ")
)