【问题标题】:rails and kaminari轨道和kaminari
【发布时间】:2013-03-21 00:33:29
【问题描述】:

我有一个系统,可以在单个请求中生成数以千计的报告来填充表格,我使用 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 条记录,将它们发送回查看,等等。我不想一次查询这么多记录并让整个视图填充它们。

【问题讨论】:

  • 您有什么想问的吗?
  • @summea 是的,我如何让 kaminari 一次只发回 20 条记录,而不是全部发回(以 20 条为一组)
  • 你可能想看看其他question/answer...

标签: ruby-on-rails pagination


【解决方案1】:

下面一行正在加载所有数据:

 reports = unit.reports_for(history_date_range)

加载数据后,您正在使用分页,这类似于在performance 和responsiveness 方面不使用分页。所以你需要在这个查询上使用分页。如果您可以提供有关您所查询内容的更多详细信息,则将有助于准确回答。

【讨论】:

  • 我已经试过了。即使我得到返回 20 条记录 @reports.page(params[:page]).per(20),per() 方法也会覆盖 unit.reports_for(history_date_range).limit(20) 上的 limit(20) )。
  • 查询如下所示:reports.where{(time > my{range.begin}) & (time
  • 你的型号是什么??
  • 一个名为 Unit 的模型和一个名为 Report 的模型。一个单位有很多报告。
  • 你能把sql查询贴在哪个服务器上吗?因为我没有得到你到底在做什么
猜你喜欢
  • 1970-01-01
  • 2012-02-08
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多