2013/10/26

Rails4からActiveRecordのorderにハッシュを渡せるようなった。

以前、[rails]ActiveRecordのソートという記事を書いた。あれからおよそ1年半の間にRails4がリリースされ、まさにこのソートの機能も改良されたっぽい。

order(*args)

ActiveRecordのソート処理は、ActiveRecord::QueryMethods.orderで実装されている。これまでは、

User.order('name')
=> SELECT "users".* FROM "users" ORDER BY name

User.order('name DESC')
=> SELECT "users".* FROM "users" ORDER BY name DESC

User.order('name DESC, email')
=> SELECT "users".* FROM "users" ORDER BY name DESC, email

User.order(:name)
=> SELECT "users".* FROM "users" ORDER BY "users"."name" ASC

しかなかったのに対し、Rails4から、
User.order(email: :desc)
=> SELECT "users".* FROM "users" ORDER BY "users"."email" DESC

User.order(:name, email: :desc)
=> SELECT "users".* FROM "users" ORDER BY "users"."name" ASC, "users"."email" DESC

のように、ハッシュでソート条件を指定できるようになった。
おかけで、降順もスマートに指定できるね。