我觉得我在这里错过了一些明显的东西,但是在这里。
我有本地数据库存储对象的属性。当我更新对象的实例时,我也调用远程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调用远程重新更新记录似乎太不利于用户体验 –