【发布时间】:2021-01-27 14:34:04
【问题描述】:
我遇到myobject.save! 导致此错误的情况:
PG::UniqueViolation: 错误:重复键值违反唯一约束“things_pkey” 详细信息:键 (id)=(12345) 已存在。 : INSERT INTO "things" ("id", ...) VALUES (12345, ...) RETURNING "id"
因此,rails 有一个持久记录,但尝试执行插入而不是更新,然后在插入中包含 id(因为,我猜,在插入的情况下,它不习惯排除任何列)。
在代码的更上方,在我正在查看的情况下,同一对象上可能会触发也可能不会触发save!。这个保存唯一值得注意的是它发生在rescue 块内。我在控制台中做了一些简单的测试,看看如果某个对象是在救援块中创建的,是否由于某种原因不被认为是持久的,并且没有发现任何此类行为。
什么可能导致 rails 认为我的对象没有持久化?
【问题讨论】:
-
您需要发布更多代码以提供上下文。现在我们根本不知道你在哪里打电话给
save!(特别是因为你打了两次电话)。发布发生这种情况的整个方法,我相信有人可以提供合理的解释 -
唉,代码很长,所以我无法轻松地制作有意义的伪代码。它所做的一切都是典型的。分配属性并保存。
-
很遗憾,我们无法仅根据此处提供的内容提供帮助,因此我建议您至少尝试通过删除所有多余的行来总结代码中的问题。另外,“代码很长”本身就是一个问题。尝试将其分解为更小的功能块,这将使调试变得更加容易。
标签: ruby-on-rails rails-activerecord