Limit number of pages in will_paginate

后端 未结 3 1079
眼角桃花
眼角桃花 2021-01-05 16:38

So, when using Sphinx searches are limited to 1000 results. But, if there are more than 1000 results pagination links generated by will_paginate don\'t take thi

相关标签:
3条回答
  • 2021-01-05 17:09

    I found the best solution was to do this:

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

    Where the 1000 is preferably not hardcoded :). This gets you the correct behaviour of the will_paginate view helper for free,

    0 讨论(0)
  • 2021-01-05 17:11
    if params[:page].to_i * 30 <= 1000
      @posts = Post.paginate(:page => params[:page], :per_page => 30)
    end
    
    0 讨论(0)
  • 2021-01-05 17:16

    I think it's better to submit the parameter :total_entries to method paginate:

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

    will_paginate will generate links only for the number of pages needed to show 1000 results.

    You can also verify that the requested page belongs to the interval:

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

    Moreover, by submitting the parameter :total_entries, you avoid the sql COUNT query that will_paginate normally runs to retrieve the total number of entries.

    0 讨论(0)
提交回复
热议问题