ActiveRecord :: Base.transaction与嵌套事务

时间:2018-10-17 14:35:40

标签: ruby-on-rails postgresql

我有一个Rails应用程序(Rails v4.2.4和Ruby v2.2.2)有时会出现魔术错误。.所以,让我们尝试解释发生的情况。

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

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

问题不会每次都出现,这对我来说意味着错误不在我的代码上,因为该规范令人满意。

我已经阅读了许多文档,并得到了带有嵌套事务的可疑“ ActiveRecord :: Base.transaction” ...但即使是我最努力的尝试,我也无法重现该错误,这确实使我感到困惑和沮丧

我正在寻求帮助! rs ..

1 个答案:

答案 0 :(得分:0)

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

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

更高级的方法是使用ActiveRecord::Locking。当您处理财务数据时,此技术尤其重要。

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