我正在编写一个导入例程,允许用户上传 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 异常。
关于ruby-on-rails - 导入 - csv 到 activerecord - Rails 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3241418/