【问题标题】:Sorting across multiple pagination pages with will_paginate使用 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 分页

【问题讨论】:

    标签: jquery ruby-on-rails haml will-paginate


    【解决方案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,它有订阅模式,但内容很棒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多