Как настроить URL Kaminari для включения только определенных параметров? - PullRequest
0 голосов
/ 04 ноября 2019

В настоящее время я использую kaminari для нумерации страниц в моем проекте. Сгенерированный URL содержит также и другие параметры в дополнение к параметру page .

Например, я использую следующее для генерации URL своей следующей страницы:

path_to_next_page(items, params: params)

Это дает мне что-то следующее:

/ items? Param1= value1 & page = 1

Однако я хочу, чтобы был виден только параметр страницы, а не другие параметры:

/ items? page = 1

Я попробовал следующий код, но он все еще дает мне URL со всеми параметрами:

path_to_next_page(items, params: {page: params['page']})

Я также прошел этот вопрос и попробовал следующее дляссылки на отдельные страницы:

paginate items, params: {page: params['page']}

Однако при этом также генерируется URL со всеми параметрами.

Можно ли сгенерировать URL-адрес только при наличии параметра страницы?

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Обычный вариант использования для разбивки на страницы состоит в том, что вам нужны все остальные параметры (вам нужна n-я страница с теми же результатами), поэтому удалить некоторые параметры в запросе немного сложно.

Параметры, которые вы передаете в вызов paginate, объединяются с параметрами текущей страницы для генерации ссылок. Это означает, что вы можете удалить параметры, установив их значение равным nil, если вы знаете, как они называются, например,

= paginate @items, params: { param1: nil }

. Вы можете сделать это программно, если хотите удалить все параметры из ссылки на страницы, но вы 'Я должен быть осторожен с «особыми» параметрами, т.е. вы, вероятно, хотите игнорировать :controller и :action, например. Например,

# Get a list of params we want to nullify
params_to_remove = params.keys.select { |param| ![:action, :controller, :page].include?(params) }

# Create a hash of those params mapped to nil
paging_params = params_to_remove.inject({}) { |param, hsh| hsh[param] = nil; hsh }

= paginate @items, params: paging_params
0 голосов
/ 04 ноября 2019

В вашем контроллере:

class ItemsController < ApplicationController
  ITEMS_PER_PAGE = 10

  def index
    @items = Item.page(params[:items_page]).per(ITEMS_PER_PAGE)
  end
end

А на ваш взгляд:

= paginate @items, param_name: :items_page

Теперь это добавит к вашим параметрам items_page.

Например /items?items_page=1

...