将非ActiveRecord操作包装在ActiveRecord事务中,这将起作用



我有一段代码,它创建数据库记录,但也处理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。

相关内容

  • 没有找到相关文章

最新更新