次のプロパティを持つDataMapperクラスSong(PostgreSQL経由)があります。
property :rating, Float, :required => false
ユーザーは曲を評価できます。問題は、ユーザーが利用可能な曲を評価別に閲覧できるようにすることです。5曲あり、そのうち3曲が評価されているとすると、次のようになります。
Song.all(:order => [:rating.desc])
{null、null、10、7、6}などの順序で曲を取得します。これらのnull値を順序の一番下に配置して、結果が{10、7、6、null、null}のようになるようにする簡単な方法はありますか。
私は試した
Song.all(:rating.not => nil, :order => [rating.desc]) + song.all(:rating => nil)
しかし、これは私の結果セットがゼロになるようにクエリを組み合わせます。
もちろん、別の方法として、デフォルトでnull評価を-1のようなものにすることもできますが、いくつかの制限があるため、可能であればこれを避けたいと思います。