Сортировка по нескольким страницам пагинации с помощью will_paginate - PullRequest
0 голосов
/ 03 июля 2018

В настоящее время я использую will_paginate для разбивки на таблицы, сортировка также осуществляется с помощью jquery. Проблема в том, что paginate пропускает только таблицу, поскольку текущая видимая таблица объектов, скажем, 25 из 100 элементов таблицы. Таким образом, сортировка происходит только на одной странице из 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

= paginate @ people

1 Ответ

0 голосов
/ 03 июля 2018

Самый простой способ - добавить параметры запроса в конечную точку, допускающие разные ключи сортировки:

/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 результатов, которые вы получите).

...