与kaminari反向分页

Nic*_*nto 15 pagination ruby-on-rails-3 kaminari

我想为消息传递系统创建分页,其中显示的第一个页面包含最旧的消息,后续页面显示较新的消息.

例如,如果{a,b,c,d,e,f,g,h,i}每页3页的正常分页是:

{a,b,c}, {d,e,f}, {g,h,i}
Run Code Online (Sandbox Code Playgroud)

然后反向分页将是:

{g,h,i}, {d,e,f}, {a,b,c}
Run Code Online (Sandbox Code Playgroud)

我计划在页面前面添加结果与正常分页相同,只从最后一页开始.

这有可能kaminari吗?

Dan*_*ans 0

是的,但是我想出的方法并不完美。实际上,您必须设置自己的顺序:

Message.page(1).per(3).order("created_at DESC").reverse!
Run Code Online (Sandbox Code Playgroud)

这种方法的问题有两个:

首先是反面!调用将作用域解析为数组并执行查询,使用 AR 作用域削弱了 kaminari 的一些很棒的方面。

其次,与任何反向分页一样,您的偏移量将会移动,这意味着在两次重复调用之间,您可能会发送 3 条新消息,并且您会得到完全相同的数据。这个问题是反向分页所固有的。

另一种方法是询问“最后”页码并将页码递增到 1。