首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails和kaminari

rails和kaminari
EN

Stack Overflow用户
提问于 2013-03-21 00:08:58
回答 1查看 566关注 0票数 0

我有一个系统,它可以在单个请求中生成数千个报告来填充一个表,并且我使用kamanari对每页20条记录进行分页。由于在单个请求中可能加载了数千个报告,因此无论请求格式是html还是json,加载这些报告有时都需要几分钟的时间。我用kaminari尝试了很多东西。

代码语言:javascript
复制
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个。即使当我单击第二个页面时,它也会再次遍历整个分页路线,查询10,000条记录,并在页面上显示20条记录。

而不是这样:

代码语言:javascript
复制
= paginate @reports.page(params[:page]).per(20)

我还尝试了这个:

代码语言:javascript
复制
= paginate @reports, :total_pages => 2

这仍然需要很长的时间,但只显示了2个页面,而不是所有的页面。

我尝试做的事情如下所示。假设总共有100条记录,这意味着有50页,每组20条。我只想查询前20条记录,将其发送回视图,并用这20条记录填充视图,并有一个小箭头符号指示还有更多记录。然后,当用户单击箭头符号时,它只查询下一组20条记录,将它们发送回视图,依此类推。我不想一次查询这么多记录,然后让整个视图都填充这些记录。

EN

回答 1

Stack Overflow用户

发布于 2013-03-21 00:33:29

下面这行是加载所有数据:

代码语言:javascript
复制
 reports = unit.reports_for(history_date_range)

在加载数据之后,您正在使用分页,就performanceresponsiveness而言,这类似于不使用分页。因此,您需要在此查询上使用分页。如果你能给出你要查询的更多细节,这将有助于准确的回答。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15528861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档