我目前这样做是为了打破我的文件指出:使用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