当我在counter_cache上订购时,它首先返回nil对象?

时间:2011-09-26 07:55:25

标签: ruby-on-rails counter-cache

我的项目模型上有owns_count counter_cache。当我做的时候

Items.order("owns_cache DESC")

,它返回我在其他结果之前为零的对象。如果我做

"owns_cache ASC"

,这是对的。

我该怎么办?

1 个答案:

答案 0 :(得分:2)

如何对NULL进行排序取决于底层数据库。

对于PostgreSQL,你可以这样做:

Items.order("owns_cache DESC NULLS LAST")

对于MySQL和SQLite:

Items.order("COALESCE(owns_cache, 0) DESC")

我认为MySQL会在DESC排序的底部对NULL进行排序,因此您可能不需要任何特殊的东西。这种COALESCE方法也可以在PostgreSQL中使用,因此这将是一个可移植的解决方案,可以在任何地方为您提供一致的结果。

如果您想在ASC排序的底部使用NULL,则可以使用大于最大0数字的内容替换owns_cache