我有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!
我哪里出错了?
答案 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