2012-07-26 29 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