为什么will_paginate .maximum return nil?

时间:2017-04-20 18:22:08

标签: ruby-on-rails pagination will-paginate

我有一个40行的典型用户表。当我在will_paginate .paginate结果上调用.maximum时,当页面为nil或1时,我得到预期的结果:

  

(byebug)User.paginate(page:nil,per_page:5).maximum(:id)

     

1036274506

     

(byebug)User.paginate(page:1,per_page:5).maximum(:id)

     

1036274506

但是当页面为2时.maximum返回nil。

  

(byebug)User.paginate(page:2,per_page:5).maximum(:id)

     

在进行下游处理的其余部分之前,我需要的是.paginate结果集中特定列的最小值和最大值。我知道我可以在这个列上调用.order,然后调用.first和.last,但这会抛弃我下游处理所需的现有顺序。

我的问题是:

  1. 当页面为2时,为什么.maximum返回nil?
  2. 我是否错过了一个简单的解决方案,可以轻松地从此列中获取最小值/最大值?
  3. 如果必须的话,我会破解它,但我希望首先了解这里发生的事情,然后再避免黑客入侵。

    我正在使用Rails 5.0.1和WillPaginate 3.1.5。

    谢谢!

1 个答案:

答案 0 :(得分:0)

User.paginate(page:1,per_page:5).maximum(:id)将触发 用OFFSET 0查询

mysql> SELECT MAX(用户. ID为) FROM用户WHERE用户. trashed_at IS NULL LIMIT 5 OFFSET 0; +-------------------+ | MAX(用户. ID为) | +-------------------+ | 1036274506 | +-------------------+ 1 row in set (0.00 sec)

User.paginate(page:2,per_page:5).maximum(:id)使用OFFSET 5进行火灾查询

SELECT MAX( {用户{1}} ID为. {用户{1}} {用户{1}} {trashed_at {1}}

不确定,但我认为max不能使用偏移量,

您可以使用) FROM获取最大ID。