使用 will_paginate 对多个分页页面进行排序
Posted
技术标签:
【中文标题】使用 will_paginate 对多个分页页面进行排序【英文标题】:Sorting across multiple pagination pages with will_paginate 【发布时间】:2018-12-12 04:06:44 【问题描述】:我目前正在使用 will_paginate 对表格进行分页,使用 jquery 也可以进行排序。问题是分页只会传递表格,因为当前可查看的对象表格说 100 个表格项目中的 25 个。所以排序只发生在 25 的一页上。有没有办法对所有 100 项进行排序,然后分页?
@people = @results.records.where(active: true).order('signup_at DESC NULLS LAST').paginate(page: params[:page], per_page: 25)
- if @people.any?
%table.ui.sortable.striped.table
%thead
%tr
%th Name
%th Email
%th Phone
%th Submissions
%th Signed up
%th Signup form
%th Most recent note
%tbody
= render @people
= 为@people 分页
【问题讨论】:
【参考方案1】:最简单的方法是将查询参数添加到您的端点以允许不同的排序键:
/users/2/comments?sort_key=name
/users/2/comments?sort_key=age
然后在你的控制器中设置这个:
@people = @results.records.where(active: true).order("#params['sort+key'] DESC NULLS LAST").paginate(page: params[:page], per_page: 25)
那么你有整个 100 个 cmets 的集合按 key 排序。
您想要实现的,2 种排序策略在实现和用户体验方面确实令人困惑。要么全部获取并在 javascript 中实现分页,要么离开分页服务器端。两种策略完全不同,一种是获取所有结果(JavaScript),另一种是分页,这意味着每次页面重新加载都需要运行查询,访问数据库。
请注意,您仍然可以在当前集合中使用 JQuery 应用不同的排序(在本例中,您返回的 25 个结果)。
【讨论】:
谢谢。这为我指明了正确的方向。我只想补充一点,我发现了一个很好的实现这个railscasts.com/episodes/228-sortable-table-columns Ryan Bates 的穹顶相当不错,如果有时间,请查看 GoRails,它有订阅模式,但内容很棒。以上是关于使用 will_paginate 对多个分页页面进行排序的主要内容,如果未能解决你的问题,请参考以下文章
在记录集合上使用 will_paginate 会更改分页结果计数?
Rails 3 分页,will_paginate 与 Kaminari