达到NULL值时CSV.foreach中断

时间:2017-08-16 20:15:40

标签: ruby-on-rails ruby csv

我有rake这个任务,我试图将CSV文件导入我的数据库。有些原因它不会完成,而是在最后一行引发错误。我试过早点停止它,但它仍然会抛出相同的错误。我还确保没有超过最后一个有效值的任何其他行。要import我使用activerecord-import宝石。请参阅下面的代码:

desc 'add customer to my db'
  task :add_my_db => :environment do
  puts "adding to my internal database.. hold the line"
  add
end
require 'csv'
require 'pp'

def add
  rows_to_insert = []
  CSV.foreach("customers.csv", headers: true) do |row|
    pp row
    rows_to_insert << row
  end
  Customer.import(rows_to_insert)
end

它引发的错误是:ArgumentError: Invalid arguments!

我哪里出错了?

1 个答案:

答案 0 :(得分:0)

在使用CSV进行批量上传时,如果需要跟踪失败的行,最好使用救援异常来捕获错误,并将错误项存储在临时对象中。然后在next中使用rescue继续下一行。它会是这样的:

def add
  rows_to_insert = []
  error_rows = []
  CSV.foreach("customers.csv", headers: true) do |row|
    begin
      pp row
      rows_to_insert << row
    rescue => Exception
      error_rows << row
      next
    end
  end
  Customer.import(rows_to_insert)
  # export/show your error_rows here
end