ruby-on-rails - 为什么rails认为我的对象没有持久化?
问题描述
我有一种情况myobject.save!
导致此错误:
PG::UniqueViolation:错误:重复键值违反唯一约束“things_pkey”详细信息:键 (id)=(12345) 已存在。:插入“事物”(“id”,...)值(12345,...)返回“id”
因此,rails 有一个持久记录,但尝试执行插入而不是更新,然后在插入中包含 id(因为,我猜,在插入的情况下,它不习惯排除任何列)。
在代码的更上方,在save!
我正在查看的情况下,同一对象上可能会触发也可能不会触发。这个保存唯一值得注意的是它发生在一个rescue
块内。我在控制台中做了一些简单的测试,看看是否由于某种原因,如果一个对象是在救援块内创建的,那么它是否不被认为是持久的,并且没有发现任何此类行为。
什么可能导致 Rails 认为我的对象没有持久化?
解决方案
弄清楚了!
我正在用user.things.build
. User#things 不是关联。这是一个返回 ActiveRecord::Relation 的方法。这种方法最近已更改为Things.where(id: ...)
. 因此,Rails 在构建新对象时尽可能多地使用查询。
推荐阅读
- python - 如何使用 tempfile 模块从 NamedTemporaryFile 获取 Python os.PathLike 对象?
- php - Doctrine DBAL 2.13 $statement->execute() 返回 bool(而不是 Result)
- html - 部分权重大小以适合 html css 中的文本
- reactjs - 无效的挂机呼叫警告
- java - 如何部署 javafx 应用程序
- php - 如何根据虚拟主机设置 php 设置?
- reactjs - 从一个兄弟组件调度 redux 操作时,如何让所有兄弟组件正确重新渲染?
- r - geom_tex 仅针对特定数据旋转文本
- javascript - 如何制作一个显示具有相同类名的多个项目的按钮
- javascript - jQuery 函数在 sweetalert2 模式中不起作用