2010-11-19 3 views
1

나는 현재이 일을하고있다가 내 파일을 탈출하려는 :루비 fastercsv을 사용하여 1000 개 라인

users = User.all() 

users.each do |u| 

csv << ..... 

end 

하지만 내 파일이 큰에 방법입니다, 내가 파일 당 1,000 행으로 그것을 밖으로 헤어지고 싶어하고, 파일 이름을 다음과 같이 지정하십시오.

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

어떻게하면 되나요? 나 혼자서 벗어나는 오류를 망칠 필요가 없습니다.

답변

0

AR의 제한 및 오프셋 방법을 사용하십시오. 그리고 파일을 생성 할 때마다 오프셋을 변경하십시오.

users = User.all 

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

을하고 당신은 새 파일로 전환하는 시간 때 알고 인덱스를 사용

0

은 당신이 뭔가를 할 수 있습니다.

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

find_in_batches입니다. 기본적으로 find_in_batches:batch_size (1000)을 사용하므로 코드는 다음과 같이 표시됩니다.

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