ruby-on-rails - 带有嵌套事务的 ActiveRecord::Base.transaction
问题描述
我有一个 Rails 应用程序(Rails v4.2.4 和 Ruby v2.2.2),它有时会神奇地出错......所以,让我们试着解释一下会发生什么。
出于某种原因,我的记录在几秒钟内就被复制了,他只是复制了交易并保留了重复的记录
我想知道你们中的某个“大师”是否通过了这种情况。
问题不会每次都发生,对我来说,错误不在我的代码上意味着什么,因为规范是令人满意的。
我已经阅读了很多文档,并得到了一个带有嵌套事务的可疑“ActiveRecord::Base.transaction”......但即使我尽我最大的努力我也无法重现该错误,这真的让我感到困惑和不安
我在寻求帮助!rs ..
解决方案
好的。首先,如果您不想在基础中有重复的记录,那么您应该添加数据库约束。通过此链接可以更好地理解。数据库约束是避免重复数据的第一步。
现在 ActiveRecord::Base.transaction 通常用于在一次调用中创建/更新两个或多个不相关的对象时。你希望他们所有人都成功,否则什么都不做。当您创建单个对象时,默认情况下所有回调都包含在事务中,因此在这种情况下您无需添加 ActiveRecord::Base.transaction 块。
更先进的方法是使用ActiveRecord::Locking。当您处理财务数据时,这种技术尤其重要。
要重现错误,只需同时发送两个 curl 请求。
推荐阅读
- python - 如何正确地从列表中丢弃类似的元素?
- c++ - 基于两个堆栈的堆栈计算器
- json - 选择数据作为 JSONB,其中值用作 json 键
- java - 如何在多边形上显示浮动工具提示文本
- javascript - 如何使用 this.state 更新表中的值?
- keras - 将图像和标签一起输入到 lstm
- python - Pyro4 杀死空的名称服务器
- javascript - 如何在 Mac 上的 Microsoft Visual Studio 2017 上安装扩展
- android - Firebase 身份验证(电子邮件和密码)如何检查用户是否仍然存在?
- javascript - 使用firebase时如何防止离子刷新页面