例如,我有一个Post模型,我将按照以下方式达到每页限制10个;
Post.paginate(:page => params[:page], :per_page => 10)
但我的问题是,我如何随机限制页面。
例如,对于第一页我要显示10条记录,而在第二页我要显示15条记录,依此类推。
我如何在我的rails应用程序中实现它。
posts_controller.rb
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy]
# GET /posts
# GET /posts.json
def index
@posts = Post.paginate(page: params[:page])
dynamic_paging = {"1" => 10, "2"=> 15, "3"=> 20, "4"=>25 }
per_page_after_four = 30
params[:page] = params[:page] || 1
if params[:page] < 5
@posts = Post.paginate(:page => params[:page], :per_page => dynamic_paging[params[:page]])
else
@posts = Post.paginate(:page => params[:page], :per_page => per_page_after_four)
end
end
index.html.erb
<center><%= will_paginate @posts %></center>
欢迎任何建议。
提前谢谢。
答案 0 :(得分:2)
通过使用以下代码,您可以实现此目的,但您需要确定限制,例如,在第4页之后,所有页面都应包含per_page 30.
dynamic_paging = {"1" => 10, "2"=> 15, "3"=> 20, "4"=>25 }
per_page_after_four = 30
params[:page] = params[:page] || 1
if params[:page] < 5
@posts = Post.paginate(:page => params[:page], :per_page => dynamic_paging[params[:page]])
else
@posts = Post.paginate(:page => params[:page], :per_page => per_page_after_four)
end
如果您想从视图中设置per_page,那么这是更新后的解决方案。
在视图上使用select。
<%= select_tag :per_page, options_for_select([10,15,20,25], params[:per_page].to_i),
:onchange => "if(this.value){window.location='?per_page='+this.value;}" %>
并在控制器中。
@per_page = params[:per_page] || Post.per_page || 20
@posts = Post.paginate( :per_page => @per_page, :page => params[:page])
希望这会有所帮助!
答案 1 :(得分:0)
修改索引视图如下;
def index
dynamic_paging = {"1" => 10, "2"=> 15, "3"=> 20, "4"=>25 }
params[:page] = params[:page] || 1
if params[:page].to_i < 5
@posts = Post.paginate(:page => params[:page], :per_page => dynamic_paging[params[:page].to_s])
end
end