我有一个当前执行情况 will_paginate 使用 paginate_by_sql 方法来建立收集分页。我们有一个自定义的查询 total_entries 这是非常复杂,并把一个大型负载上我们数据库。因此,我们想要减少total_entries从页。

换句话说,不是典型的页码显示的以前的1[2]3 4 5下,我们只想一下-以前的按钮只。但是,我们需要知道一些事情。

  1. 我们显示上一个链接?这只会发生的,当然,如果记录现有的前的显示在目前的选择
  2. 我们显示下一个链接?这将不会显示如果最后记录在所收集正在显示

文档

查询数行 自动生成的,如果你 没源:total_entries.如果你 遇到的问题与这个 产生SQL,你可能会想 执行计手在你的 应用程序。

所以最终理想的情况如下。

  • 除total_entries计数,因为它是造成过多的负载上的数据库
  • 50的显示记录的时间用半页数只采用一个以前的按钮导航,而不是需要显示所有可用的页码
  • 只能显示在下按钮,先前因此按钮

有人曾与一个类似的问题,或者有想法在决议?

有帮助吗?

解决方案

有很多场合will_paginate不会真的很可怕的工作的计算数量的项目,特别是如果有加入参与这一混淆的数SQL发电机。

如果所有你需要的是一个简单的上/下一个方法,那么所有你需要做的就是尝试找回N+1个条目的数据库,并且如果你只能得到N或少于你是在最后一页。

例如:

per_page = 10
page = 2

@entries = Thing.with_some_scope.find(:all, :limit => per_page + 1, :offset => (page - 1) * per_page)

@next_page = @entries.slice!(per_page, 1)
@prev_page = page > 1

你可以很容易地封装,这在一些模块,以包含在各种模型,需要它,或使一个控制器的扩展。

我发现,这种工作的明显好于默认will_paginate方法。

唯一性问题是一个限制MySQL这可能是一个问题,根据你的表。

无论出于何种原因,需的时间进行查询与一个小小的限制在MySQL成比例的偏移。在作用,该数据库引擎读通过的所有行领导到特定的偏移值,然后返回下一个数量限制行,不跳,你会期望。

对于大的数据集,其中你有偏移值在100 000加范围,您可能发现业绩下降显着。这将如何清单,载入第1页是很快的,1000页是有些缓慢,但页,2000年是极为缓慢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top