mysql - Ruby on Rails ActiveRecord 中的 Order 和 sort_by 区别

标签 mysql ruby-on-rails ruby activerecord

我正在尝试根据我的 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_byEnumerable 中的一个 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/

相关文章:

ruby - 将 ruby​​ 数组中的哈希与其同级数组进行比较

ruby-on-rails - Rspec Suite 在 OmniAuth 模拟身份验证哈希上失败

php - 登录后显示客户信息

mysql - 将一个表中的多条记录插入到另一个表中

mysql - MySQL 中的日期验证

ruby-on-rails - 在 Rails 4 中将进度消息从服务器传递到前端

c# - 上传excel文件到数据库时出错

javascript - 使用 javascript/jquery 向表中添加新行

ruby-on-rails - Rails 自定义模型方法中的 where 查询

ruby - 您如何设置 Rack::URLMap 以在 Sinatra 中使用 RSpec?