为什么 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,但这会取消下游处理所需的现有顺序。
我的问题是:
- 为什么第 2 页时 .maximum 返回 nil?
- 我是否缺少一个简单的解决方案来轻松地从此专栏中获取 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。
我有一个典型的用户 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,但这会取消下游处理所需的现有顺序。
我的问题是:
- 为什么第 2 页时 .maximum 返回 nil?
- 我是否缺少一个简单的解决方案来轻松地从此专栏中获取 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。