我正在使用 ActiveMerchant 处理可能成功或失败的信用卡交易,这是涉及使用 ActiveRecord 处理的一些内部会计的更大交易的一部分。如果某个部分失败,我不清楚如何回滚整个事务。
我有一个支付模型和一个积分模型——用户的积分被转换为美元以用于减少他们的支付。所以我需要做这些事情:
- 与金额和积分有关的多项验证
- 保存积分交易:借记用户帐户,贷记内部帐户
- 从信用卡中扣除从积分中扣除的金额
- 保存此付款数据
- 保存信用卡交易结果(无论成功还是失败)
- 然后,如果一切正常,向用户发送电子邮件
我看到ActiveRecord::Transactions是如何工作的,并假设我可以使用after_commit
(and after_rollback
) 回调来处理诸如向用户发送电子邮件之类的事情。
但是,如何让失败的信用卡交易导致与失败的 AR 相同的回滚save
?raise ActiveRecord::Rollback
如果我的非 AR 交易失败,是否像打电话一样简单?上面链接的文档中有一个部分让我对此感到紧张(与无法跨多个数据库连接工作的事务有关)。
Rails 3.2.5、MySQL 5.1 (InnoDB)、Ruby 1.9.3