[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です。
以上、参考になれば幸い。