🍓

【Rails】クエリ結果を任意の並び順にできるin_order_of

に公開

通常 order をつかうActiveRecordの並べ替えですが、
これだと基本的に昇順・降順の並び替えのみになってしまいます。
特定のカラムの任意の並び順にしたい場合、Rails7から
in_order_of と言うメソッドが追加されたのでご紹介します。

使用方法

User.in_order_of(:id, [1, 5, 3])
# SELECT "users".* FROM "users" ORDER BY FIELD("users"."id", 1, 5, 3)

第一引数にカラム名、第二引数にその並び順を指定します。
これを指定することで、 ORDER BY FIELD を使ったSQLが発行され、
任意の順番に並べ替えることができるようになります。

ActiveRecord::QueryMethodsのメソッド

需要があるかわかりませんが、 in_order_of はActiveRecord::QueryMethodsクラスのメソッドです。
公式のコードはこちら
https://github.com/rails/rails/blob/a555fc8c981eb753ae8c3feaf61b8ac8bf46688e/activerecord/lib/active_record/relation/query_methods.rb#L717

Discussion