2013-11-04 28 views
2

我的应用我的所有策略导出一个excel文件,但不能导出我的所有信息无法在轨

这里出口超过5000行是在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行,我应该有11408

有人能帮助我吗?

我会很感激帮助

这是我的最后一个日志

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] 
+0

我记得方法包括分页[sql-limit],有一次我遇到类似性质的问题。检查你的sql查询和分页。 –

+0

我的查询是在MySQL中工作,以及我把边界0检查边界是否在5000行上关闭,但不是边框,我在11000行结束时检查并关闭,有什么错误似乎是有限制的,有人有同样的问题? –

+1

我发现这个,但是为asp http://stackoverflow.com/questions/1403884/unable-to-export-5000-rows/1404046?noredirect=1#comment29393982_1404046 –

回答

4

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

@search = Policy.find_by_sql( “从那里删除= 0 AND(状态= 0或状态= 1)ORDER BY状态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 %> 
+0

我试过了你的代码,但是我使用rails 2.3 编译错误 /home/carlos/proyectos/company/app/views/policy_management/policy/_report_by_ejecutive.erb:27:syntax error,unexpected':',expected')' ... @ results.find_each(batch_size:1000)do | policy | ; @output_b ... ^ /home/carlos/proyectos/company/app/views/policy_management/policy/_report_by_ejecutive.erb:68:语法错误,意外kENSURE,期待$尾 –

+0

哎呀,你使用红宝石<1.9吗?那么你必须使用:batch_size => 1000.请阅读我更新的答案 – xmpolaris

+0

我试过你的代码,现在我得到了“未定义的方法'find_each'为#” –

3

这可能是因为你分页的结果(适用于较大的结果集的范围)。你可以尝试删除分页?

+0

@CarlitosMorales分页没有排序的结果 - 它只是给你足够的结果每页(这是有道理的网站,但不是为csv出口)。排序是由您的SQL处理'ORDER BY状态ASC ''''''''''''''''''''请更新问题并删除分页 - 可能在视图或控制器中引用了它。 –

+0

您能否尝试从link_to Export Excel中删除':page => params [:page]'? –

+0

是我尝试过,但仍然不能正常工作 –

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 

,并检查其输出什么编号的日志。

接下来检查日志。它将向您显示实际执行的数据库查询。如果存在分页宝石或某些配置会影响结果,那么您会看到实际执行的另一个sql查询。

1

有你第一次尝试返回CSV记录?我想也许这是相对于Excel出口商,可能会限制单个Excel表中有多少条记录。

+0

我没有返回csv,但似乎可能是需要导出的时间 –