Ruby on rails 在ActiveRecord事务中包装非ActiveRecord操作,这是否有效?

Ruby on rails 在ActiveRecord事务中包装非ActiveRecord操作,这是否有效?,ruby-on-rails,activerecord,transactions,Ruby On Rails,Activerecord,Transactions,我有一段代码可以创建db记录,但也可以处理Dwolla事务。我希望这是全部或没有。如果事务块内的任何一行抛出异常,前两行(活动记录行)是否会回滚?注意,整个过程都包含在开始/救援/结束中,但我只关心这一点 User.transaction do user.save! record.save! transactionId = Dwolla::Transactions.send({:destinationId => user.dwolla_id, :amount => amo

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

是的,只要它们在失败时实际引发异常,DB事务就会回滚,您的
就会保存s将不会提交给数据库