テーブルにデータを入力する 1 回のリクエストで文字通り数千のレポートを生成するシステムがあり、kamanari を使用して 1 ページあたり 20 レコードをページ分割します。1 回のリクエストで数千のレポートが読み込まれる可能性があるため、リクエストの形式が html か json かに関係なく、読み込みに数分かかることがあります。カミナリでいろいろやってみました。
my_controller.rb
def my_table
reports = unit.reports_for(history_date_range) #This could return possibly 10,000 reports
paginated_reports = reports.order('time desc').page(params[:page]).per(20)
@reports = paginated_reports
...
end
my_table.html.haml
- @reports.each do |r|
...
= paginate @reports.page(params[:page]).per(20)
上記の問題は、kaminari がビューに 20 レコードしか返さないことです。たとえば、10,000 をすべて送信します。そして、それらを 20 のグループにページ分割するだけです。2 番目のページをクリックしても、ページ分割ルート全体を再度通過し、10,000 レコードをクエリして、ページに 20 レコードを表示します。
これではなく:
= paginate @reports.page(params[:page]).per(20)
私もこれを試しました:
= paginate @reports, :total_pages => 2
これにはまだ時間がかかりますが、存在するすべてのページではなく、合計 2 ページしか表示されません。
私がやろうとしていることは次のとおりです。合計 100 レコードがあり、20 のグループに 50 ページあるとします。最初の 20 のみを照会し、それをビューに送り返し、それらの 20 レコードをビューに入力し、小さな矢印記号を示します。もっとあること。次に、ユーザーがその矢印記号をクリックすると、次の 20 レコードのセットのみが照会され、それらが表示されるように送り返されます。一度に非常に多くのレコードをクエリして、ビュー全体にそれらを入力する必要はありません。