关于ruby on rails:为什么will_paginate .maximum返回nil?

why does will_paginate .maximum return nil?

我有一个典型的用户表,其中包含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)

nil

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

我的问题是:

  • 为什么当页面为2时.maximum返回nil?
  • 我是否缺少一个简单的解决方案来轻松地从该列中获取最小值/最大值?
  • 如果需要的话,我会对其进行破解,但我希望首先了解这里发生的事情,然后希望避免黑客入侵。

    我正在使用Rails 5.0.1和WillPaginate 3.1.5。

    谢谢!


    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(用户. id ) FROM用户WHERE用户. trashed_at IS NULL LIMIT 5 OFFSET 5;
    Empty set (0.00 sec)

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

    您可以使用User.paginate(page:2 , per_page: 2).pluck(:id).max作为最大ID。