我有一个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,但这会抛弃我下游处理所需的现有顺序。
我的问题是:
如果必须的话,我会破解它,但我希望首先了解这里发生的事情,然后再避免黑客入侵。
我正在使用Rails 5.0.1和WillPaginate 3.1.5。
谢谢!
答案 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。