我正在使用 FasterCSV 将上传的文件导入模型,它非常适合小文件。但是,当我尝试导入大型数据集(21,000 行)时,它需要很长时间,并且我在实时服务器上遇到浏览器超时。
这是我当前的工作代码:
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
我喜欢使用后台进程,但用户需要先查看导入了多少行,然后才能进入系统的下一步。
所以,我在想我应该使用动作分块并且只读取较少的行数,设置一个计数器,然后用某种进度更新视图,然后使用前一个计数器作为起点再次运行该方法。
我似乎看不到如何让 FasterCSV 仅读取一组行数,并为起点设置偏移量。
有谁知道如何做到这一点?或者有没有更好的方法来处理这个?