Как заставить Kaminari всегда включать параметр страницы? - PullRequest
10 голосов
/ 30 марта 2011

При генерации URL Kaminari пропускается параметр страницы, если он генерирует ссылку на первую страницу. Однако приложение предназначено для выбора случайной страницы, если параметр страницы пропущен. Поведение Каминари по умолчанию, таким образом, исключает возможность разбиения страницы на первую страницу надежным способом.

Я решил эту проблему и чуть позже опубликую свое решение ниже, но я хотел опубликовать этот вопрос для потомков, и я также довольно новичок в Rails, поэтому я не уверен, что мое решение - это лучший или самый элегантный, и меня интересуют улучшения и доработки, если только для моего эгоистичного назидания!

Ответы [ 4 ]

14 голосов
/ 30 марта 2011

Строка кода в Kaminari, которая реализует поведение, которое мы хотим изменить, находится в lib/kaminari/helpers/tags.rb в методе Kaminari::Helpers::Tag::page_url_for.

  def page_url_for(page)
    @template.url_for @template.params.merge(@param_name => (page <= 1 ? nil : page))
  end

Чтобы переопределить это поведение,Я создал файл lib/kaminari/helpers/tag.rb, содержащий следующее:

module Kaminari
  module Helpers
    class Tag
      def page_url_for(page)
        @template.url_for @template.params.merge(@param_name => (page < 1 ? nil : page))
      end
    end
  end
end

Затем я исправил файл, добавив следующую строку в config/initializers/extensions.rb:

require "lib/kaminari/helpers/tag.rb"

Мои извинения за любыенеловкость с терминологией Ruby / Rails, я все еще довольно плохо знаком с Ruby.Комментарии и критика приветствуются.

8 голосов
/ 28 июля 2012

UPDATE

Новая версия источника kaminari потребует это в качестве обновленной строки:

@template.url_for @params.merge(@param_name => (page))

В противном случае вы потеряете другие параметры, переданные в ваш вызов нумерации страниц.

Для ясностиради, вот полный вывод нового кода:

module Kaminari
  module Helpers
    class Tag
      def page_url_for(page)
        @template.url_for @params.merge(@param_name => (page))
      end
    end
  end
end

Вы все равно поместите это в файл инициализаторов, как предложил Даниэль.

5 голосов
/ 30 июля 2016

На сегодняшний день (июль 2016 года), основная ветвь Kaminari включает в себя параметр конфигурации params_on_first_page, который по умолчанию равен false.

Установка этого параметра конфигурации на true будет включать параметры страницы для всех страниц, включая страницу 1.

Обратите внимание, что основная ветвь не является стабильной версией, поэтому используйте ее с осторожностью!

0 голосов
/ 01 февраля 2018

Это ответ на 2018 год, поскольку я пишу это:

Как указано на домашней странице kaminari github

Запустите это длясоздайте файл конфигурации для kaminari:

rails g kaminari:config

Это создаст файл kaminari_config.rb в папке config / initializers

Раскомментируйте строку: config.params_on_first_page = false и замените false на true:

config.params_on_first_page = true

Перезагрузите сервер, если это необходимо.Вот и все:)

...