如果交易失败,请保留数据



我有一项交易,即使失败了,也需要详细的记录。我该怎么做?

这是我的代码:

# csv gets loaded etc.
import = CsvImport.new
import.logger += 'Starting import'
ActiveRecord::Base.transaction do
  import.logger += 'CSV loaded, starting import'
  csv_array.each_with_index do |row, index|
    begin
      unless importer.has_key?(row[0])
        import.logger += 'Key not found'
        raise StandardError
      end
      result = CsvImporter.import_line(row[0])
      import.logger += 'Imported line #{index} successfully' if result
    rescue
      import.logger += 'Transaction aborted!'
    end
  end
  import.logger += 'Transaction successful!'
end

在失败的事务中,记录器仅具有"启动导入",而没有交易中的任何添加字符串 - 显然。如何保留该数据?

begin-rescue块只是值得捕获异常的包装器。就您而言,您需要一项交易。您可以使用类似的东西

YourClass.transaction do
  # do a lot of stuff
end

@yourmodel.transaction do 
  # do stuff !
end

查看文档:http://api.rubyonrails.org/classes/activerecord/transactions/classmethods.html

可能是交易和救援块的组合:查看"异常处理和回滚"部分的文档

最新更新