2010-11-19 53 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