我有一个系统,可以在单个请求中生成数千个报告以填充表格,并且我使用 kamanari 对每页 20 条记录进行分页。因为在单个请求中可能会加载数千个报告,所以无论请求格式是 html 还是 json,它们有时都需要几分钟才能加载。我用 kaminari 做了很多尝试。
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 个为一组进行分页。即使我单击第二页,它也会再次遍历整个分页路线,并查询 10,000 条记录并在页面上显示 20 条记录。
而不是这样:
= paginate @reports.page(params[:page]).per(20)
我也试过这个:
= paginate @reports, :total_pages => 2
这仍然需要很长时间,但只显示 2 个总页面,而不是所有页面。
我想要做的如下。假设总共有 100 条记录,这意味着 20 组中有 50 个页面。我只想查询前 20 个,将其发送回视图,然后用这 20 条记录填充视图并有一个小箭头符号指示还有更多。然后,当用户单击该箭头符号时,它只查询下一组 20 条记录,将它们发送回查看,等等。我不想一次查询这么多记录并让整个视图填充它们。