我正在尝试根据我的 Controller 中的时间戳字段对我的数据进行排序,请注意时间戳字段可能为空并且可能有一些值。我写了以下查询。
@item = Item.sort_by(&:item_timestamp).reverse
.paginate(:page => params[:page], :per_page =>5)
但是当我有 time_timestamp 字段值为 NULL 的项目时,这会出错,但以下查询有效。
@item = Item.order(:item_timestamp).reverse
.paginate(:page => params[:page], :per_page => 5)
谁能说出这两个查询之间的区别,以及在什么情况下使用哪一个?
我正在使用 order 和 reverse 从数据库中获取最新的项目,这是最好的方法还是有其他从性能方面从数据库中获取最新数据的最佳方法?
最佳答案
.sort_by
是 Enumerable 中的一个 Ruby 方法用于对数组(或类似对象的数组)进行排序。使用 .sort_by
将导致所有记录从数据库加载到服务器内存中,这可能导致严重的性能问题(以及您的 nil 值问题)。
.order
是一种将 ORDER BY
子句添加到 SQL 选择语句的 ActiveRecord 方法。数据库将处理记录的排序。这在 99% 的情况下是可取的。
关于mysql - Ruby on Rails ActiveRecord 中的 Order 和 sort_by 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42711769/