Ruby on rails 3 Rails 3:将ActiveRecord操作和外部信用卡包装到单个事务中

Ruby on rails 3 Rails 3:将ActiveRecord操作和外部信用卡包装到单个事务中,ruby-on-rails-3,activerecord,transactions,activemerchant,Ruby On Rails 3,Activerecord,Transactions,Activemerchant,我正在使用ActiveMerchant处理信用卡交易,该交易可能成功或失败,这是涉及使用ActiveRecord处理的一些内部会计的更大交易的一部分。如果某个部分出现故障,我不清楚如何回滚整个事务 我有一个支付模型和一个积分模型——用户的积分被转换成美元,用来减少他们的支付。所以我需要做这些事情: 与金额和点数相关的几项验证 保存积分交易:借记用户帐户、贷记内部帐户 从积分中扣除支付金额后的信用卡费用 保存此付款数据 保存信用卡交易结果(是否成功) 然后,如果一切正常,向用户发送电子邮件 我

我正在使用ActiveMerchant处理信用卡交易,该交易可能成功或失败,这是涉及使用ActiveRecord处理的一些内部会计的更大交易的一部分。如果某个部分出现故障,我不清楚如何回滚整个事务

我有一个支付模型和一个积分模型——用户的积分被转换成美元,用来减少他们的支付。所以我需要做这些事情:

  • 与金额和点数相关的几项验证
  • 保存积分交易:借记用户帐户、贷记内部帐户
  • 从积分中扣除支付金额后的信用卡费用
  • 保存此付款数据
  • 保存信用卡交易结果(是否成功)
  • 然后,如果一切正常,向用户发送电子邮件
我看到了如何工作,并假设我可以使用提交后的
(以及回滚后的
)回调来处理向用户发送电子邮件之类的事情

但是如何使失败的信用卡交易导致与失败的AR
save
相同的回滚?如果我的非AR事务失败,是否像调用
raiseActiveRecord::Rollback
一样简单?上面链接的文档中有一个部分让我对此感到紧张(与无法跨多个数据库连接工作的事务相关)


Rails 3.2.5、MySQL 5.1(InnoDB)、Ruby 1.9.3

您的ActiveMerchant调用是指向外部服务器的,因此不会影响您的ActiveRecord交易。请随时提出
ActiveRecord::Rollback

您的ActiveMerchant呼叫是到外部服务器的,因此不会影响您的ActiveRecord交易。请随意提出
ActiveRecord::Rollback
@TanzeebKhalili--将此移到一个答案,我将标记它为已回答--所有操作都已完成且有效。