限制will_paginate中的页数

时间:2012-04-16 11:48:13

标签: ruby-on-rails ruby pagination will-paginate

因此,使用Sphinx时,搜索限制为1000个结果。但是,如果有超过1000个结果,则will_paginate生成的分页链接不会将此考虑在内,并提供指向1000/per_page以外的网页的链接。设置 max pages 或类似的东西是一种显而易见的方法吗?

干杯。

3 个答案:

答案 0 :(得分:12)

我认为最好将参数:total_entries提交给方法paginate

@posts = Post.paginate(:page => params[:page], :per_page => 30, 
                       :total_entries => 1000)

will_paginate将仅为显示1000个结果所需的页数生成链接。

您还可以验证请求的页面是否属于间隔:

if params[:page].to_i * 30 <= 1000
  @posts = Post.paginate(:page => params[:page], :per_page => 30, 
                         :total_entries => 1000)
end

此外,通过提交参数:total_entries,您可以避免通常运行will_paginate的sql COUNT查询来检索条目总数。

答案 1 :(得分:1)

if params[:page].to_i * 30 <= 1000
  @posts = Post.paginate(:page => params[:page], :per_page => 30)
end

答案 2 :(得分:0)

我发现最好的解决方案是这样做:

@results = Model.search(...)
if @results.total_pages >= (1000/Model.per_page)
  class << @results; def total_pages; 1000/Model.per_page; end end
end

1000最好不要硬编码:)这样可以免费获得will_paginate视图助手的正确行为,