无法在rails中导出超过5000行

时间:2013-11-04 19:17:16

标签: ruby-on-rails ruby ruby-on-rails-2

我做了一个应用程序来导出excel文件中的所有策略,但是没有导出我的所有信息

这是mysql中的查询

select * from policies where deleted = 0 AND (state = 0 OR state= 1) ORDER BY state ASC 
i got 11,408 total when i executed it on mysql

这是我的控制器

  @search = Policy.find_by_sql("select * from policies where deleted = 0 AND (state = 0 OR state= 1) ORDER BY state ASC ")
  @policies = @search.paginate(:page => params[:page], :per_page => 10)
  @results = @search

  respond_to do |format|
     format.html
     format.xls { send_data render_to_string(:partial=>"report"), :filename => "Report.xls" }
  end

这是我的观点

 <%= link_to "Export Excel",{:controller=>"policy",:action=>"report", :format=>"xls",:page => params[:page] }  %>

这是我的部分视图

<% @results.each do |policy| %>
     <%= policy.num_policy %> 
<% end %>

实际上只输出5078行,我应该有11,408

有人可以帮我这个吗?

我真的很感激帮助

这是我的上一次日志

 Rendered policy_management/policy/_report_by_ejecutive (42929.2ms)
 Sending data Report_2013-11-11.xls
 Completed in 43533ms (View: 0, DB: 0) | 200 OK [http://0.0.0.0/policy_management/policy/generate_print_ejecutive?format=xls]

4 个答案:

答案 0 :(得分:4)

您应该使用批量查询 ActiveRecord Batch query

@search = Policy.find_by_sql(“select * from policies where deleted = 0 AND(state = 0 OR state = 1)ORDER BY state ASC”)

@search = Policy.where("deleted = 0 AND (state = 0 OR state = 1)").order("state ASC")

在你的部分

<% @results.find_each(:batch_size => 1000) do |policy| %>
 <%= policy.num_policy %> 
<% end %>

答案 1 :(得分:3)

可能是因为您正在对结果进行分页(这会在较大的结果集上应用范围)。你可以尝试删除分页吗?

答案 2 :(得分:2)

尝试缩小问题所在。

例如,您没有提到限制是否仅在生成Excel格式时发生。在以HTML格式请求页面时,您获得了多少行?

您还可以通过转到控制台并执行以下操作来检查从查询中创建的对象数:

@search = Policy.find_by_sql("select * from policies where deleted = 0 AND (state = 0 OR state= 1) ORDER BY state ASC ")
puts @search.count

并检查日志输出的数字。

接下来检查日志。它将显示实际执行的数据库查询。如果有一个分页gem或某些配置会影响结果,那么你会看到一个不同的sq查询实际执行。

答案 3 :(得分:1)

您先尝试返回csv记录吗?我想也许这与excel导出器有关,可能会限制单个excel表中的记录数。