myobject.save! 导致此错误的原因是:
myobject.save!
PG::UniqueViolation:错误:重复键值违反唯一约束“things_pkey” 详细信息:密钥(id)=(12345)已存在。 :将返回“id”的值(12345,…)插入到“things”(“id”)中
因此,rails有一个持久化记录,但尝试执行插入而不是更新,然后在插入中包含id(因为,我猜,在插入的情况下,它不习惯排除任何列)。
save! 在同一个物体上,在我看到的情况下,它可能会也可能不会开火。这次拯救唯一值得注意的是它发生在一个 rescue
save!
rescue
是什么导致rails认为我的对象没有持久化?
我当时正在用 user.things.build Things.where(id: ...) . 因此,在构建新对象时,rails顺从地使用了尽可能多的查询。
user.things.build
Things.where(id: ...)