Как я могу сделать пагинацию и сортировку работать вместе - PullRequest
0 голосов
/ 05 октября 2019

У меня есть методы, которые сортируют и позволяют пользователям просматривать страницы списков гостей в таблице. Они оба работают индивидуально, но я не могу заставить их работать вместе - последний предпочитает.

Я пытался использовать && и ||но первый будет применяться только.

class GuestlistsController < ApplicationController
  before_action :set_guestlist, only: [:show, :edit, :update, :destroy]
  helper_method :sort_column, :sort_direction
  Guests_Size = 5

  def index
  @page = (params[:page] || 0).to_i
  @guestlists = (Guestlist.offset(Guests_Size * @page).limit(Guests_Size)) 
  @guestlists = (Guestlist.order(sort_column + " " + sort_direction))
  respond_to do |format|
    format.html
    format.csv { send_data @guestlists.to_csv }
    format.xls # { send_data @products.to_csv(col_sep: "\t") }
  end
end

Помощник для сортировки

module ApplicationHelper
  def sortable(column, title = nil)
  title ||= column.titleize
  css_class = column == sort_column ? "current #{sort_direction}" : nil
  direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
  link_to title, {:sort => column, :direction => direction}, {:class => css_class}
end
end

Guestlist.html.erb Сортировки

<th scope="col"><%= sortable  "firstname" %></th>
      <th scope="col"><%= sortable  "lastname" %></th>
      <th scope="col"><%= sortable  "email" %></th>
      <th scope="col"><%= sortable  "response" %></th>
      <th scope="col"><%= sortable  "dietary_requirements" %></th>

Пагинация

<ul class="pager">
      <li class="previous <%= @page == 0 ? 'disabled' : '' %>">
          <%= link_to_if @page > 0, "<< Previous", guestlists_path(page: @page - 1) %>
      </li>

      <li class="next">
          <%= link_to "Next >>", guestlists_path(page: @page + 1) %>
      </li>
   </ul>

Я хочу, чтобы пользователи сортировали, но также могли отображать количество гостей на странице вместе.

Что происходит, происходит только одно.

1 Ответ

0 голосов
/ 05 октября 2019

Вторая из этих строк

@guestlists = (Guestlist.offset(Guests_Size * @page).limit(Guests_Size)) 
@guestlists = (Guestlist.order(sort_column + " " + sort_direction))

всегда переопределяет первую строку.

Просто измените свой код на

@guestlists = Guestlist.offset(Guests_Size * @page).limit(Guests_Size)
@guestlists = @guestlist.order(sort_column => sort_direction)
...