2013-11-04 63 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,但似乎可能是需要導出的時間 –