will_paginate的total_entries无法正常工作rails 4

时间:2015-09-16 17:12:26

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

在控制器中:

@top_holders = Holders.where(:client_id=>1).paginate(:page => params[:page],:per_page => 10 ,:total_entries => 12)

在视图中:

<%= will_paginate @top_holders, renderer: BootstrapPagination::Rails %>

在视图页面中我得到20条不正确的记录,它应该是12条记录。即在页面= 1中,它返回10条记录,在页面= 2中,它返回另外10条记录。

为了获得解决方案,我已经失去了一整天,请帮助我。

4 个答案:

答案 0 :(得分:1)

您的查询可能不会只返回12条记录,我会尝试使用 limit 的其他方法,如下所示:

@top_holders = Holders.where(:client_id=>1).paginate(:page => params[:page],:per_page => 10).limit(12)

限制(N)会为您提供最后N条记录

答案 1 :(得分:0)

total_entries密钥只是一种避免SQL COUNT查询的方法。如果您想要返回更多结果,请将:per_page设置为更高的值。

答案 2 :(得分:0)

如果仅使用total_entries保存SQL COUNT查询...为什么要返回的结果少于现有结果?

如果你真的需要,你可以这样做:

PAGE_SIZE = 15
MAX_SIZE = 70

per_page = if PAGE_SIZE * params[:page] > MAX_SIZE
  MAX_SIZE - (MAX_SIZE / PAGE_SIZE) * PAGE_SIZE
else
  PAGE_SIZE
end

@top_holders = Holders.where(client_id: 1).paginate(page: params[:page], per_page: per_page)

答案 3 :(得分:0)

total_entries选项只是一个快捷方式,可以避免will_paginate查询结果的计数,这就是为什么你在最后一页获得额外的结果。因此,如果你真的想限制分页中显示的结果数量,但不要弄乱分页结果,你需要使用子查询(因为will_paginate会覆盖你设置的任何限制):

@top_holders = Holders.
  where(
    id: Holders.where(client_id: 1).limit(12).map(&:id)
  ).paginate(page: params[:page], per_page: 10)

但是,这可能会导致问题,如果您想要显示非常多的持有者,而不是12,因为您可能会在某些数据库中达到查询长度限制。