ruby-on-rails - 导入 - csv 到 activerecord - Rails 中的错误处理

标签 ruby-on-rails csv activerecord error-handling

我正在编写一个导入例程,允许用户上传 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/

相关文章:

ruby-on-rails - Rails Controller 中的自定义方法

mysql - Ruby on Rails IF 语句验证检查

json - 为什么 `inputs` 跳过输入文件的第一行?

ruby-on-rails - 返回 false,则无法将项目添加到 :through 的 has_many 中

css - 无法将自定义字体添加到 Rails 应用程序

ruby-on-rails - Heroku Rails 应用程序 v 1.2.6 无法推送 : unrecognized error

python - 如何在 Python 中从 CSV 文件生成多个 Vcard QRCode?

node.js - 完成 Mongo 写入后 Node csv 调用挂起

sql - 将 SQL 查询转化为 ActiveRecord Relation

ruby-on-rails - Rails has_many 通过为多种类型使用 source 和 source_type 别名