Пагинация Kaminari возвращает только первые 25 результатов, но не все - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь кэшировать запросы, поступающие для продуктов.Я использую драгоценный камень Kaminari для нумерации страниц, но по какой-то причине я не вижу все продукты на странице просмотра.Кажется, только взять 25 лучших и перечислить их.

def index

cache_key = Product::CACHE_KEY_PREFIX + params.map{|k,v| "[#{k}-#{v}]"}.join("-")

@products = Rails.cache.fetch(cache_key, expires_in: 30.minutes) do
  search_params = params.permit(:product_type,:format).to_h.symbolize_keys
  if search_params[:product_type]
    products = Product.by_product_type(params[:product_type])
  elsif params[:filters].present?
    filters = params[:filters].try(:symbolize_keys)
    products = Product.where(filters)
  else
    products = Product.all
  end
  byebug #at this point products count is 43
  products = products.page(params[:page])
  byebug #count is now 25
  @products = Kaminari.paginate_array(products.to_a).page(params[:page])
  @products #count is 25
end

respond_to do |format|
  format.html
  format.json
end

конец

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Из документов.

Вы можете настроить следующие глобальные значения по умолчанию , переопределив эти значения с помощью метода Kaminari.configure.

config.default_per_page = 100      # 25 by default

Есть удобный генератор, которыйгенерирует файл конфигурации по умолчанию в каталог config / initializers.Запустите следующую команду генератора, затем отредактируйте сгенерированный файл.

rails g kaminari:config
0 голосов
/ 18 сентября 2018

Вы должны изменить это.

@products = Kaminari.paginate_array(products.to_a).page(params[:page])

к этому:

@products = Kaminari.paginate_array(products.to_a).page(params[:page]).per(products.count)

Размер по умолчанию равен 25, если размер не указан.

...