[英]Import - csv to activerecord - error handling in Rails
我正在编写一个导入例程,该例程将允许用户上传CSV文件以加载其数据库。 CSV的每一行都对应一个模型 。
我正在使用FasterCSV读取文件并将数据拆分为单独的模型,效果很好。 我只是在确定处理错误的最佳方法方面遇到困难。
现在我有这个打算,但是对我来说确实很不对劲:
def import(collection)
begin
self.transaction do
collection.collect{|object| object.save!}
end
rescue ActiveRecord::RecordInvalid => invalid
return false
end
return true
end
有没有更好的方法来保存模型集合?
当您要查找有问题的记录时,在循环中使用异常会为您带来各种麻烦。 您可能会尝试保存所有内容,但要报告有错误的内容:
def import(collection)
failed = nil
transaction do
failed = collection.reject { |r| r.save }
unless (failed.empty?)
raise ActiveRecord::Rollback
end
end
failed
end
假设您有兴趣查看这些错误。 如果任何记录失败,它们将以数组形式返回。 否则,您将得到nil,这意味着没有错误。
如果您不在乎,可以随时进行快速而肮脏的保存:
def import(collection)
transaction do
collection.each(&:save!)
end
end
对于第一次失败,这将弹出一个ActiveRecord :: RecordInvalid异常。
对于这个问题,我认为更好的方法是您的方法。 也许不是csvaré中的所有记录都有效,而那些没关系的记录(记录它们以了解错误)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.