2012-07-26 88 views
5

我正在尝试为Rails 3.2应用程序使用will_paginate,并且我没有在任何地方看到任何引用,当有人正在分页时db分页中的数据发生更改时会发生什么。更具体地说,新的记录被添加。Rails will_paginate和ajax,在数据库表更改时进行分页

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

这个问题听起来并不坏,但它是非常糟糕的,如果你想使用will_paginate分页对于无限滚动如下所示:http://railscasts.com/episodes/114-endless-page

我想过将第一页面加载的时间戳记并将其传递给连续的ajax调用,以便对首先出现的记录进行过滤,以避免重复出现。

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

+0

我使用时间戳来获取只有在第一次加载页面时出现的数据。 – Oded 2012-08-05 13:13:26

+0

在这种情况下,您可能需要考虑添加一个检查,以确定是否有任何记录比时间戳更新,如果是,则显示允许用户加载更新结果的链接(请参阅Twitter如何执行此操作,例)。 – Benissimo 2013-04-16 09:32:48

回答

1

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

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

使用返回的最旧记录的时间戳在查询时间中也是有利的,因为数据库不需要计数100条记录来获取第101条记录,它可以简单地获取比特定时间更早的第一条记录(如果您的created_at列被编入索引,这会更快 - 允许二进制搜索)。

+0

您好@ronalchn您能写一个我们可以更多了解的代码示例... – medBo 2014-01-07 08:29:10