ぼくらの研究

ぼくらのための研究をしていきます。

[Rails]orderメソッドでDESCソート時nilを一番小さい値として扱う方法

   

例えばUserモデルオブジェクトをaaa属性の値が高いものから順に並べようとした場合(降順)、


User.order(aaa: "DESC")

というようなコードを書きがちだと思うのですが、特に指定がない場合はカラムの値がnilだった場合にそれを一番大きい値として扱ってしまいます。

しかし、実際にはnilを一番小さい値として扱ってほしいことの方が多いはず。
※ちなみにASC(昇順)の場合はデフォルトでnilが一番小さい値として扱われます。

 

これを防いでDESCソート時にnilを一番小さい値として扱う場合は


User.order('aaa IS NULL, aaa DESC') 

というように書けばOK。

 

そもそもソート内容にnilのオブジェクトを含めたくない場合は


User.where.not(aaa: nil).order(aaa: "DESC")

とすればOKです。

以上、参考になれば幸い。