使用will_paginate

时间:2018-07-03 19:04:57

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

我目前正在使用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 个答案:

答案 0 :(得分: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条按键排序的注释。

您想要实现的2种排序策略在实现和UX方面确实令人困惑。要么全部获取并在JavaScript中实现分页,要么离开分页服务器端。两种策略完全不同,一种策略是获取所有结果(JavaScript),而另一种则是分页,这意味着每次重新加载页面都需要运行查询才能访问数据库。

请注意,您仍然可以在当前集中使用JQuery应用不同的排序(在这种情况下,您会获得25条结果)。