我目前正在使用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
答案 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条结果)。