首页 > 解决方案 > 带有嵌套事务的 ActiveRecord::Base.transaction

问题描述

我有一个 Rails 应用程序(Rails v4.2.4 和 Ruby v2.2.2),它有时会神奇地出错......所以,让我们试着解释一下会发生什么。

出于某种原因,我的记录在几秒钟内就被复制了,他只是复制了交易并保留了重复的记录

我想知道你们中的某个“大师”是否通过了这种情况。

问题不会每次都发生,对我来说,错误不在我的代码上意味着什么,因为规范是令人满意的。

我已经阅读了很多文档,并得到了一个带有嵌套事务的可疑“ActiveRecord::Base.transaction”......但即使我尽我最大的努力我也无法重现该错误,这真的让我感到困惑和不安

我在寻求帮助!rs ..

标签: ruby-on-railspostgresql

解决方案


好的。首先,如果您不想在基础中有重复的记录,那么您应该添加数据库约束。通过此链接可以更好地理解。数据库约束是避免重复数据的第一步。

现在 ActiveRecord::Base.transaction 通常用于在一次调用中创建/更新两个或多个不相关的对象时。你希望他们所有人都成功,否则什么都不做。当您创建单个对象时,默认情况下所有回调都包含在事务中,因此在这种情况下您无需添加 ActiveRecord::Base.transaction 块。

更先进的方法是使用ActiveRecord::Locking。当您处理财务数据时,这种技术尤其重要。

要重现错误,只需同时发送两个 curl 请求。


推荐阅读