我正在使用kaminari宝石进行分页。问题是我需要在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)
答案 0 :(得分:1)
首先,您可以省略与前向/上一页相关的所有代码。 Kaminari已经解决了这个问题。 就此而言,在您的视图中,使用以下代码:
= paginate @your_resource
这将呈现由HTML5标记包围的多个?page = N分页链接。 (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。