我正在尝试使用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调用,以便对最初出现的记录进行过滤,以便不获取重复项。
是否有一些最佳实践方法来处理这个问题?
答案 0 :(得分:1)
如果仅添加记录,则检查时间戳的解决方案有效。另一种方法是使用返回的最旧记录的时间戳来获取下一组数据。
这样,如果删除了一条记录,那么就不会跳过任何记录。
使用返回的最旧记录的时间戳在查询时间也是有利的,因为数据库不需要计算100条记录来获取第101条记录,它可以简单地获取比特定时间更早的第一条记录(如果您的created_at列已编入索引,则速度要快得多 - 允许二进制搜索。