以前、[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のように、ハッシュでソート条件を指定できるようになった。
おかけで、降順もスマートに指定できるね。