在控制器中:
@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条记录。
为了获得解决方案,我已经失去了一整天,请帮助我。
答案 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,因为您可能会在某些数据库中达到查询长度限制。