Ruby on rails 如果事务失败,是否保留数据?

Ruby on rails 如果事务失败,是否保留数据?,ruby-on-rails,ruby-on-rails-4,transactions,Ruby On Rails,Ruby On Rails 4,Transactions,我有一个需要详细记录的事务,即使它失败了。我该怎么做 这是我的代码: # 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| beg

我有一个需要详细记录的事务,即使它失败了。我该怎么做

这是我的代码:

# 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

看看这些文件:


事务和救援块的组合是可能的:查看“异常处理和回滚”部分的文档。我该如何使用它?文档没有告诉我任何新的东西,因为我是按照文档记录的方式使用它的。还有人知道如何保存事务的日志输出(或任何一般数据)吗?@Cojones好的,现在我明白了。在代码中,您将记录器输出分配给事务内部定义的记录器。当此操作失败时,请确保所有内容都恢复,并且输出中没有任何内容。我想你可以试试:1。在事务或2之外定义记录器。直接将输出转换成日志文件,而不是收集变量中的数据,然后打印出来。我这样做了,请参阅我更新的问题。不走运:(我不想把它写在一个文件里,然后再读一遍,还有其他解决办法吗?这种方法怎么样
@yourmodel.transaction do 
  # do stuff !
end