【发布时间】:2017-03-10 06:30:55
【问题描述】:
我正在尝试根据控制器中的时间戳字段对数据进行排序,请注意时间戳字段可能为空并且可能具有某些值。我写了以下查询。
@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 从数据库中获取最新项目,这是从性能方面获取最新数据的最佳方法还是其他最佳方法?
【问题讨论】:
-
你确定第一个不是
Item.all.sort_by(&:item_timestamp)? AR 模型没有类方法sort_by。 -
@MichaelKohl:是的,我正在使用 sort_by 而不是 all,可能是我从选择查询之前的查询中收到了数组而不是活动记录关系。
-
@MichaelKohl 我相信
Item.all是 Item::ActiveRecord_Relation 的一个实例,至少在我使用的 Rails 版本中是这样。从我的 Rails 控制台:` 2.4.4 :002 > Event.all.class => Event::ActiveRecord_Relation 2.4.4 :003 > Event.all.methods.grep /sort/ => [:sort, :sort_by] `
标签: mysql ruby-on-rails ruby activerecord