コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

ActiveRecordにはそれまでのorderを無視して上書きするreorderというメソッドがある

一体どういう意図でつくったのかわからないが見つけたのでメモがてら。打ち消しの記述なんて危険しか孕んでないから、おそらくコレは見かけたら駆除したほうがいい系のメソッドだとは思っている。

環境

rails (5.2.0)

例えば普通にorderすると以下のようにクエリが吐き出される

User.order(:id)
#  User Load (0.6ms)  SELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC

複数指定すると以下のように重ねてORDER BYをかける

User.order(:id).order(:updated_at)
#  User Load (5.2ms)  SELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC, `users`.`updated_at` ASC

ここをreorderに返ると以下のようになり打ち消される

User.order(:id).reorder(:updated_at)
#  User Load (2.7ms)  SELECT `users`.* FROM `users` ORDER BY `users`.`updated_at` ASC

reorderは重ねて使っても最後しか採用されない

User.order(:id).reorder(:updated_at).reorder(:created_at)
#  User Load (0.7ms)  SELECT `users`.* FROM `users` ORDER BY `users`.`created_at` ASC

参考リンク