2010-11-19 65 views
1

我目前這樣做是爲了打破我的文件指出:使用Ruby fastercsv,希望通過1000線

users = User.all() 

users.each do |u| 

csv << ..... 

end 

但我的文件路到大,我想打破它伸到每個文件1K行,將文件命名爲:

users_1-1000.csv users_1001-2000.csv .etc。

我該如何做到這一點,我不想搞亂一個一個的錯誤!

回答

0

使用AR的極限和偏移方法。每次生成文件時都要更改偏移量。

0

你可以做這樣的事情:

users = User.all 

users.each_with_index do |u, i| 
    csv << ... 
end 

,然後你使用索引知道什麼時候它的時間切換到一個新的文件。

(i % 1000) == 0 #Open new file 
(i % 1000) == 999 #Close existing file 
3

find_in_batches是完美的。默認情況下,find_in_batches使用1000的:batch_size,所以您的代碼看起來像這樣:

count = 1 
User.find_in_batches do |users| 
    FasterCSV.open("filename-#{count}.csv",'w') do |csv| 
    users.each { |u| csv << ... } 
    count += 1 
    end 
end