我有一项交易,即使失败了,也需要详细的记录。我该怎么做?
这是我的代码:
# 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
可能是交易和救援块的组合:查看"异常处理和回滚"部分的文档