我目前這樣做是爲了打破我的文件指出:使用Ruby fastercsv,希望通過1000線
users = User.all()
users.each do |u|
csv << .....
end
但我的文件路到大,我想打破它伸到每個文件1K行,將文件命名爲:
users_1-1000.csv users_1001-2000.csv .etc。
我該如何做到這一點,我不想搞亂一個一個的錯誤!
我目前這樣做是爲了打破我的文件指出:使用Ruby fastercsv,希望通過1000線
users = User.all()
users.each do |u|
csv << .....
end
但我的文件路到大,我想打破它伸到每個文件1K行,將文件命名爲:
users_1-1000.csv users_1001-2000.csv .etc。
我該如何做到這一點,我不想搞亂一個一個的錯誤!
使用AR的極限和偏移方法。每次生成文件時都要更改偏移量。
你可以做這樣的事情:
users = User.all
users.each_with_index do |u, i|
csv << ...
end
,然後你使用索引知道什麼時候它的時間切換到一個新的文件。
(i % 1000) == 0 #Open new file
(i % 1000) == 999 #Close existing file
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