如何正确设置 kaminari

How to set up kaminari correctly

我正在使用 kaminari gem 进行分页。问题是我需要在 4 个元素之后的第一页上分页,并在 25 个元素之后的所有其他页面上分页。是否可以配置 kaminari 来解决我的问题? 这是一个用法:

.pagination
  .pagination__back
    - if params[:page] && params[:page].to_i > 1
      = link_to "Previous news", news_items_path(page: params[:page].to_i - 1)
    - else
      = ""
  .pagination__forward
    - if params[:page]
      = link_to "Next news", news_items_path(page: params[:page].to_i + 1)
    - else
      = link_to "Next news", news_items_path(page: 2)

首先,您可以省略所有与 forward/previous 页面相关的代码。 Kaminari 已经用它的助手解决了这个问题。 为此,在您的视图中,使用以下代码:

= paginate @your_resource

This will render several ?page=N pagination links surrounded by an HTML5 tag. (Source)

要拥有分页资源,您需要将以下代码添加到您的控制器中:

@your_resource = YourResource.order(:foobar).page(params[:page])
# params[:page] will get added to each "paginated" request by Kaminari 
# if you use its previously mentioned helper method.

现在你想要一个动态限制。就此而言,我建议添加如下内容:

def index
  @your_resource = YourResource.order(:foobar).page(params[:page]).per(dynamic_limit(params[:page]))
end

private
def dynamic_limit(current_page = 1)
  if current_page == 1
    return 4
  else
    return 25
  end
end

这样您将检查当前页面,如果它是第一页,它会将结果限制为 4。否则,25。