5

Rails 3.2 アプリに will_paginate を使用しようとしていますが、データベース内のデータが変更されているときに誰かがページングしているときに何が起こるかについての参照はどこにもありませんでした。具体的には、新しいレコードが追加されます。

ここで何かが欠けているかもしれませんが、仕組みがわかれば、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 呼び出しに渡して、最初に存在していたレコードをフィルタリングして、重複を取得しないようにすることを考えました。

これを処理するためのベストプラクティスの方法はありますか?

4

1 に答える 1

1

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

そうすれば、レコードが削除されても、レコードはスキップされません。

返された最も古いレコードのタイムスタンプを使用すると、データベースが 101 番目のレコードをフェッチするために 100 レコードをカウントする必要がないため、クエリ時間にも有利です。 created_at 列にインデックスが付けられている場合 - バイナリ検索が可能です)。

于 2012-08-17T06:00:21.520 に答える