为什么 will_paginate .maximum return 为零?

why does will_paginate .maximum return nil?

我有一个典型的用户 table,有 40 行。当我在 will_paginate .paginate 结果上调用 .maximum 时,当 page 为 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 returns nil.

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

nil

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

我的问题是:

  1. 为什么第 2 页时 .maximum 返回 nil?
  2. 我是否缺少一个简单的解决方案来轻松地从此专栏中获取 min/max?

如果有必要,我会破解它,但我希望首先了解这里发生了什么,其次是为了避免被破解。

我正在使用 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_atIS 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_atIS NULL LIMIT 5 OFFSET 5; Empty set (0.00 sec)

不确定,但我认为 max 不适用于偏移,

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