Importuj CSV w partiach linii w Railsach?
Używam FasterCSV do zaimportowania przesłanego pliku do modelu i działa on świetnie w przypadku małych plików. Jednak gdy próbuję zaimportować duży zestaw danych (21 000 linii), trwa to całe wieki, a na serwerze na żywo są limity czasu przeglądarki.
To jest mój obecny działający kod:
logcount=0
Attendee.transaction do
FCSV.new(file, :headers => true).each do |row|
row[1] = Date.strptime(row[1], '%m/%d/%Y')
record = @event.attendees.new(:union_id => row[0], :dob => row[1], :gender => row[2])
if record.save
logcount += 1
end
end
end
Chciałbym użyć procesu działającego w tle, ale użytkownik musi sprawdzić, ile linii zostało zaimportowanych, zanim będą mogły przejść do następnego kroku systemu.
Więc myślałem, że powinienem użyćdzielenie akcji Odczytaj tylko mniejszą liczbę linii, ustaw licznik, a następnie zaktualizuj widok z pewnym postępem, a następnie uruchom ponownie metodę, używając poprzedniego licznika jako punktu początkowego.
Nie mogę zobaczyć, jak uzyskać FasterCSV do odczytu tylko określonej liczby linii, a także ustawić przesunięcie punktu początkowego.
Czy ktoś wie jak to zrobić? Czy może jest lepszy sposób na to poradzić?