2012-07-26 13 views
5

私はRails 3.2アプリケーションにwill_paginateを使用しようとしていますが、データベース内のデータが変更されている間に誰かがページングを行っているときに何が起こるかはわかりません。具体的には、新しいレコードが追加されます。Rails will_paginateとajax、DBテーブルの変更中のページング

私はここで何か不足している可能性がありますが、それがうまくいく場合、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

+0

この場合、タイムスタンプより新しいレコードがあるかどうかのチェックを追加し、そうであればユーザーにより最近の結果を読み込ませるためのリンクを表示することを検討することもできます(例)。 – Benissimo

答えて

1

タイムスタンプをチェックするソリューションは、レコードのみが追加された場合に機能します。別の方法として、返された最も古いレコードのタイムスタンプを使用して次のデータセットを取得する方法があります。

このように、レコードが削除されると、レコードはスキップされません。

戻された最も古いレコードのタイムスタンプを使用すると、データベースで101レコードをフェッチするために100レコードをカウントする必要がないため、問合せ時間にも有利です。特定の時間より古い最初のレコードを簡単にフェッチできますcreated_at列が索引付けされている場合は、はるかに高速で、バイナリー検索が可能です。

+0

こんにちは@ronalchnは、もっと理解できるコードの例を書くことができますか? – medBo

関連する問題