我有一段代码,它创建数据库记录,但也处理Dwolla事务。我希望这一切要么全有要么全无。如果事务块内的任何一行引发异常,前两行(活动记录行)会回滚吗?注意,整件事都包含在一个开始/拯救/结束中,但我只关心这一点。
User.transaction do
user.save!
record.save!
transactionId = Dwolla::Transactions.send({:destinationId => user.dwolla_id, :amount => amount, :pin => DwollaTransaction.get_dwolla_pin})
transac = DwollaTransaction.create(user_id: user.id, transaction_id: transactionId, amount: amount)
end
感谢您的真知灼见。基本上,我想确保如果外部API调用失败,我们的内部记录永远不会被保存。
是的,只要它们在失败时实际引发异常,DB事务就会回滚,并且您的save!
不会提交到DB。