使用 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 会更改分页结果计数?

最新价格和 will_paginate

Rails 3 分页,will_paginate 与 Kaminari

Rails 5.2 上 jquery DataTables 和 will_paginate gem 的分页问题

Rails 有内置的分页解决方案吗?

ajax分页链接