我正在使用ActiveMerchant處理可能成功或失敗的信用卡事務,這是涉及使用ActiveRecord處理的一些內部會計的較大事務的一部分。如果部分失敗,我不清楚如何回滾整個事務。Rails 3:在單個事務中包裝ActiveRecord操作和外部信用卡
我有一個付款模式和一個積分模型 - 用戶的積分轉換爲美元用於減少他們的付款。所以,我需要做這些事情:
- 與達幾個驗證和點
- 攢分交易:借記用戶賬戶,信貸內部帳戶
- 費信用卡支付的金額從點 價值不大
- 保存此付款數據
- 保存信用卡交易的結果(無論成功或失敗)
- 那麼,如果一切正常,發送電子郵件給用戶
我怎麼看ActiveRecord::Transactions工作,並承擔我可以使用after_commit
(和after_rollback
)回調來處理東西,如電子郵件用戶。
但是,如何使失敗的信用卡交易導致相同的回滾,導致失敗的AR save
?如果我的非AR事務失敗,是否如調用raise ActiveRecord::Rollback
一樣簡單?上面鏈接的文檔中有一部分讓我對此感到緊張(涉及不支持多個數據庫連接的事務)。
的Rails 3.2.5,MySQL 5.1中(InnoDB的),紅寶石1.9.3
您的ActiveMerchant調用是到外部服務器,所以它不會影響您的ActiveRecord交易。隨意提高'ActiveRecord :: Rollback'。 – 2012-07-12 08:42:54
@TanzeebKhalili - 把它移到答案上,我會標記它的答案 - 這一切都已經完成並且有效。 – 2012-07-16 05:04:19
聽起來不錯,謝謝! – 2012-07-16 05:57:49