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(", ") )