ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

Railsでソートする

RailsというよりかはActiveRecordの話かもしれませんが。今回もちょっとハマったのでメモです。

基本

ひとつのテーブル内でソートを完結させる場合は特に難しいことはありません。

Model.order("column_name asc")

これでテーブルmodelsにあるレコードすべてをmodels.column_nameで昇順*1にソートします。ascをdescに変えると降順にソートします。デフォルトは昇順なので、昇順にソートしたい場合はascを省略しても構いません。

Belongs toしているテーブルのカラムでソートする

テーブルのカラムでソートしたいときがあると思います。たとえば、別のテーブルのnameというカラムの値で降順にソートするときは

Model.includes(:another_model).order("another_models.name desc")

でいけます。includes(モデル名)がポイントですね。
あと、includesのモデル名は単数形ですが、orderで書くときは複数形にしておくのもポイントだそうで。
参考: [Rails] includes(:include)した関連先をorderでソートしたい/pdf2png.zip - PDFからPNGへ(日本語対応) - たいぷらいたーざっき。(2011-05-13)

*1:1,2,3...と小さいものから並べるのが昇順、...,3,2,1と大きいものから並べるのが降順。恥ずかしながらこの年になってもいまだにあやふや