ruby-on-rails - 为什么不能直接更新 Active Record 查找的结果?
问题描述
将 Active Record 的结果find
分配给变量时,更新它的结果按预期工作:
user = User.find(1790)
user.archived # => true
user.archived = false
user.save # => true
user.archived # => false
为什么不能find
直接更新结果?
User.find(1790).archived # => true
User.find(1790).archived = false
User.find(1790).save # => true
User.find(1790).archived # => true
解决方案
每次你这样做时find
,你都会得到一个User
基于users
表中当前值的新实例。因此,当您 时User.find(1790).save
,User
实例不再具有.archived = false
,因为您刚刚从User.find
具有archived = true
.
尝试:
User.find(1790).archived # => true
User.find(1790).archived = false
User.find(1790).changed? # => false
User.find(1790).save # => true
User.find(1790).archived # => true
但是,看看当你这样做时会发生什么:
User.find(1790).archived # => true
User.find(1790).update(archived: false) # => true
User.find(1790).archived # => false
推荐阅读
- .net - 如何在运行的容器中获取 AWS Fargate 任务实例元数据?
- javascript - 如何正确编写 vuepress 插件?
- javascript - 使用 Firebase 作为后端的移动应用的处理日期
- graph-theory - Strongly Connected Components : Kosaraju algorithm
- php - php mysqli 中的数据库
- pandas - Pandas 基于多个条件的新变量
- oracle - 通过 Oracle 数据库中的视图更改表的元组
- node.js - 类型 SampleTransaction 未定义
- android - 如何申请让手机在特定时间后工作
- java - PathParam 是否可以在没有 Path 注释中的任何参数的情况下使用?