在ActiveRecord事务中包装非ActiveRecord操作,这会有效吗?

时间:2016-01-05 21:42:37

标签: ruby-on-rails activerecord transactions

我有一段代码可以创建db记录,但也可以处理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调用失败,我们的内部记录永远不会被保存。

1 个答案:

答案 0 :(得分:0)

是的,只要他们在失败时实际引发异常,就会回滚数据库事务,并且不会将save!提交给数据库。