我有一个 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)
但这结合了查询,使我的结果集为零。
当然,另一种选择是将空评级默认为-1,但由于某些限制,我宁愿尽可能避免这种情况。