3

我做了一个应用程序将我的所有政策导出到一个 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

4 回答 4

4

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

@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 %>
于 2013-11-09T22:10:59.393 回答
3

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

于 2013-11-04T19:31:31.663 回答
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 或某些配置会影响结果,那么您会看到实际执行的不同 sql 查询。

于 2013-11-04T22:23:23.893 回答
1

您是否尝试先返回 csv 记录?我认为这可能与 excel 导出器有关,单个 excel 表中的记录数可能存在限制。

于 2013-11-13T15:19:50.060 回答