我覺得我在這裏錯過了一些明顯的東西,但是在這裏。
我有本地數據庫存儲對象的屬性。當我更新對象的實例時,我也調用遠程API並更新記錄。如果該API調用不成功,我想將我的本地記錄回滾到以前保存的任何內容。目前爲止我唯一能想到的就是在更新之前製作當前記錄的副本,並在我的API調用失敗時使用該副本重新更新記錄。有這樣做的最佳做法嗎?撤消記錄更新的最佳方法是什麼?
回答
在這種情況下可以使用數據庫事務來撤銷更改。
YourModel.transaction do
# update model here
# api call here
if api_was_successful
# yay!
else
# probably do something here, like notify user
raise ActiveRecord::Rollback
end
end
事務塊中的任何異常都會導致數據庫更改回滾。除非它是ActiveRecord :: Rollback,否則異常也會被重新提出,所以如果你的api調用可以引發異常,你仍然需要處理它們(但是至少你的模型更改會被回滾。到達塊將事務被提交
參見:http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html
Bet!正是我需要的。 –
你可以這樣做。無論你想做什麼,它都可以工作,沒有什麼特別的。
此外,如果遠程更新失敗,也許您的遠程副本仍然包含您仍然想要的舊值?在這種情況下,您也可以使用遠程副本更新本地副本。
好點,但我認爲,如果失敗是遠程數據庫無法訪問我會運氣不好 –
它可能不會以您想要的方式對用戶體驗造成不利影響。如果您出於某種原因認爲第二次API調用的內容非常密集,那麼我猜,如果您認爲這是非常密集的,我想將您的API調用卸載到另一個線程,進程,服務器等。 – sajawikio
- 1. 從包含max(column2)的記錄更新column1值的最佳方法是什麼?
- 2. 什麼是記錄方法調用的最佳方式?
- 3. 什麼是記錄最好的方法?
- 4. 什麼是製作活動記錄器的最佳方法
- 5. 什麼是Hadoop MapReduce java類中的最佳記錄方法?
- 6. 用NLog集中記錄日誌的最佳方法是什麼?
- 7. 在實體框架中更新記錄的最佳做法是什麼?
- 8. 在Rails中,更新記錄或創建新記錄的最佳方式是什麼?
- 9. 什麼是我現場處理和更新的最佳方法?
- 10. 更新cookie的最佳方法是什麼?
- 11. 什麼是安全更新hibernate實體的最佳方法?
- 12. 根據外鍵找到表的最大記錄的最佳方法是什麼?
- 13. 當插入Y時更新記錄X的最佳方法
- 14. 在Rails中實現gmail樣式「撤消」的最佳方式是什麼?
- 15. PostgreSQL:什麼是更新3m記錄的有效方法?
- 16. 用MySQL創建簡要記錄的最佳方式是什麼?
- 17. 在Apache中記錄POST數據的最佳方式是什麼?
- 18. 記錄f#代碼的最佳方式是什麼?
- 19. 記錄有意切換的最佳方式是什麼?
- 20. 什麼是記錄Perl代碼的最佳方式?
- 21. 使用ETW記錄異常的最佳方式是什麼?
- 22. 什麼是回撥記錄的最佳方式?
- 23. 實現記錄鎖定的最佳方式是什麼?
- 24. 記錄mysql數據庫的最佳方式是什麼?
- 25. 什麼是「洗牌」數據庫記錄表的最佳方式?
- 26. 爲REST方法調用進行日誌記錄的最佳方式是什麼?
- 27. 什麼是用序列更新現有記錄的最快方法?
- 28. 使用SummingCombiner時,更新記錄值的最有效方法是什麼?
- 29. 使用Repository模式,更新記錄的最有效方法是什麼?
- 30. 驗證記錄是否成功插入的最佳方法是什麼?
爲什麼不先進行API調用,然後只更新您的記錄,如果它成功 – DNJohnson
這就是我在第一次做,但是,如果有本地的情況?第二個API調用遠程重新更新記錄似乎太不利於用戶體驗 –