5

我正在尝试将 will_paginate 用于 Rails 3.2 应用程序,但我在任何地方都没有看到任何参考,说明当数据库中的数据发生更改时有人进行分页时会发生什么。更具体地说,添加了新记录。

我可能在这里遗漏了一些东西,但如果我知道它是如何工作的,will_paginate 只会计算数据库中的记录。假设我一次加载一个包含 5 条记录的页面,并希望它们按最新的排序。用户加载页面并获取显示在第 1 页的记录 6-10(当时的最新记录)。然后,有人将另一条记录插入到表中,id=11。之后,第一个用户点击进入第 2 页,但现在第 2 页提供记录 2-6。所以用户在两个页面中都得到了 id=6。

这个问题听起来并没有那么糟糕,但如果你想使用 will_paginate 分页进行无限滚动,这真的很糟糕,如下所示:http ://railscasts.com/episodes/114-endless-page

我考虑添加第一个页面加载的时间戳并将其传递给连续的 ajax 调用以过滤最初存在的记录,以免重复。

是否有一些最佳实践方法来处理这个问题?

4

1 回答 1

1

如果仅添加记录,则检查时间戳的解决方案有效。另一种方法是使用返回的最旧记录的时间戳来获取下一组数据。

这样,如果删除记录,则不会跳过任何记录。

使用返回的最旧记录的时间戳在查询时间上也有优势,因为数据库不需要数出 100 条记录来获取第 101 条记录,它可以简单地获取比某个时间更早的第一条记录(这要快得多如果您的 created_at 列被索引 - 允许二进制搜索)。

于 2012-08-17T06:00:21.520 回答