我的项目模型上有 owns_count counter_cache。当我做
Items.order("owns_cache DESC")
,它返回我在其他结果之前为零的对象。如果我做
"owns_cache ASC"
, 它是正确的。
我应该做什么?
我的项目模型上有 owns_count counter_cache。当我做
Items.order("owns_cache DESC")
,它返回我在其他结果之前为零的对象。如果我做
"owns_cache ASC"
, 它是正确的。
我应该做什么?
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,则可以将 NULL 替换为0
大于最大owns_cache
数字的值。