Rails 4:.save 不会更新现有记录的updated_at?

2024-04-05

我一直以为.save and .save!将更新updated_at现有记录列。这不是真的吗?如果是这样,那么我是否需要创建一个 before_save 过滤器以在每次保存时更新它?

今天是 6 月 18 日:

    Loading development environment (Rails 4.1.1)
    irb(main):001:0>  o = Order.last
      Order Load (0.4ms)  SELECT  `orders`.* FROM `orders`   ORDER BY `orders`.`id` DESC LIMIT 1
    => #<Order id: 24, user_id: 1, order_date: nil, total_cents: 0, total_currency: "USD", shipping_cents: 0, shipping_currency: "USD", tax_cents: 0, tax_currency: "USD", subtotal_cents: 0, subtotal_currency: "USD", created_at: "2014-06-13 21:24:38", updated_at: "2014-06-13 21:24:38", status: "Incomplete", coupon_id: nil>
    irb(main):002:0> o.save!
       (0.4ms)  BEGIN
       (0.3ms)  COMMIT
    => true
    irb(main):003:0> o.updated_at
    => Fri, 13 Jun 2014 21:24:38 UTC +00:00
    irb(main):004:0> o.reload
      Order Load (0.7ms)  SELECT  `orders`.* FROM `orders`  WHERE `orders`.`id` = 24 LIMIT 1
    => #<Order id: 24, user_id: 1, order_date: nil, total_cents: 0, total_currency: "USD", shipping_cents: 0, shipping_currency: "USD", tax_cents: 0, tax_currency: "USD", subtotal_cents: 0, subtotal_currency: "USD", created_at: "2014-06-13 21:24:38", updated_at: "2014-06-13 21:24:38", status: "Incomplete", coupon_id: nil>
    irb(main):005:0> o.updated_at
    => Fri, 13 Jun 2014 21:24:38 UTC +00:00

我关心这个的原因是因为我用以下内容包装了函数的内部ActiveRecord::Base.transaction所以我想测试一下当出现问题时它们不会更新:

Rspec 测试(在不应该的情况下总是通过,因为无论成功还是失败,updated_at 都不会改变):

  it "rollsback the transaction" do
    ...
    order.stub(:save!).and_raise(StandardError)
    expect { payment_info.save }.not_to change { [billing_address.updated_at, 
                                                  shipping_address.updated_at,
                                                  order.user.updated_at,
                                                  order.updated_at] }
  end

还有我的方法:

def process_billing_info!
  ActiveRecord::Base.transaction do
    billing_address.save!
    shipping_address.save!
    user.save!
    order.update_all_fees!
  end
rescue Exception => e
  false
end

正如您在日志中看到的那样,没有UPDATE执行的 SQL 查询。 Rails 根本不会更新你的记录。这是因为.save实际上仅在发生更改时保存记录.

有方法.touch (文档 https://apidock.com/rails/ActiveRecord/Persistence/touch)您可以调用它来更新updated_at字段而无需更改您的记录:

1.9.3p489 :005 > Intervention.first.touch
  Intervention Load (12.9ms)  SELECT "interventions".* FROM "interventions" LIMIT 1
  SQL (20.5ms)  UPDATE "interventions" SET "updated_at" = '2014-06-18 16:34:03.924648' WHERE "interventions"."id" = 1
 => true 

在这里我们看到UPDATESQL 查询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 4:.save 不会更新现有记录的updated_at? 的相关文章

  • 在自定义条件下清理 SQL

    我需要创建一个简单的搜索 但我无法使用 Sphinx 这是我写的 keywords input split s queries keywords each do keyword queries lt lt sanitize sql for
  • 按共同关联的数量排序 (Rails)

    背景 我有帖子和用户 并且都有很多社区 客观的 对于任何给定的用户 我想返回一个帖子集合 按该帖子与该用户有共同社区的数量排序 具有更多共同社区的帖子位于更高的位置 我当前的尝试 使用排序方法 有效 Post includes commun
  • 将局部变量传递给视图加载后渲染的局部变量

    Update 我刚刚发现另一个线程解释了为什么我遇到这个问题 将本地 Rails 变量传递给 JavaScript 到部分 https stackoverflow com questions 12342058 pass local rail
  • 安装了 Rails 但它说我没有:)

    我刚刚执行了这个命令来安装 Rails gem install rails 它似乎运行良好并安装了东西 然后当我按照本教程进行操作时 http guides rubyonrails org getting started html http
  • Rails 4 不更新嵌套属性

    Issue 代替updating嵌套属性 它们正在created当我点击现有的嵌套属性之上 update相关的行动features controller rb 可能的原因 我认为问题在于我对 Rails 缺乏了解form for 我认为细分
  • 在所有延迟的作业之前挂钩

    是否可以在所有delayed job任务之前运行一个方法 基本上 我们试图确保每台运行delayed job的服务器都有我们代码的最新实例 因此我们希望运行一个方法来在每个作业运行之前检查这一点 我们已经有了 check 方法并在其他地方使
  • 在多个模型中与 has_many :through 建立关联

    请帮助了解该怎么做 project payments有这棵树 Project Stages Costs Payments 项目 rb has many stages has many costs through gt stages stag
  • Marionette CompositeView 为 Collection 中的每个模型呈现自身,而不是 ItemView (Marionette Rails)

    基本上 我试图将 CompositeView 渲染为带有表头的简单四列列表 其中集合中的每个模型都渲染为 并附加到 我正在跟进德里克的一个例子 http jsfiddle net derickbailey me4NK 非常接近 只有一点点变
  • Rails 查询连接关联表与别名

    我有一个模型Edge属于另一个模型Node通过不同的外键两次 def Edge lt ActiveRecord Base belongs to first class name Node belongs to second class na
  • 使用 PostgreSQL 的模式和 Rails 创建多租户应用程序

    我已经想通的事情 我正在学习如何在 Rails 中创建多租户应用程序 该应用程序根据用于查看应用程序的域或子域来提供来自不同模式的数据 我已经回答了一些问题 如何让 subdomain fu 也能与域一起使用 这是有人问了同样的问题 htt
  • 从轨道控制器返回

    这是一个初学者 Rails 问题 我这样做之后 format xml head ok 如何从控制器端点返回而不显示视图 如果我此时放弃函数的末尾 我会得到我所期望的结果 但如果我调用 返回 我最终会进入视图 或者在我的情况下会出现缺少的视图
  • 带分页的 Rails 随机活动记录

    我需要查找特定资源的所有记录并以随机顺序显示它们 但具有一致的分页 如果开始分页 您将不会看到相同的记录两次 每次用户访问页面时 显示顺序都应该是随机的 我在用将分页 http wiki github com mislav will pag
  • 如何访问 has_many :through 关联对象的相关连接模型而不需要额外的查询?

    这是我现在已经遇到过很多次的事情 我很想弄清楚如何做我想要的事情 或者构建并向 Rails 提交一个补丁来实现它 很多时候 在我的应用程序中 我会有一些看起来像这样的模型 class User lt ActiveRecord Base ha
  • Rails 2.3.14:如何序列化 ActionController::Request 对象?

    我需要编写一些根据 Rails 2 3 14 控制器收到的请求对象类型执行操作的方法 但是 我不想启动整个应用程序 甚至不想启动控制器 我只想拥有这样一个对象的编组副本 以便我可以在 Rails 环境之外使用 不幸的是 ActionCont
  • Rails 3:用户创建自定义表单?

    我正在尝试思考如何允许用户创建具有所有字段类型的自定义表单 如果有一颗宝石那就太好了 但我似乎无法在任何地方找到它 所以我有一个像这样的数据库设置 t integer form id t string name t string hint
  • 限制 has_many 关联中的对象数量

    我有一个相册 里面有很多照片 counter cache 设置会更新相册表中的 photos count 列 如何限制相册的照片数量 就我而言 使用就足够了validates length of class Album has many p
  • 如何解决“找不到密钥::密码”?

    I m very铁轨已经生锈了 我认为自从我使用它以来的七年里 发生了很多变化 我正在尝试设置这个示例应用程序 https iridakos com news 2015 06 21 rails sample api ui https iri
  • Rails 5 - Google 地图 - Javascript 错误 - initMap 不是函数 - 修复一个 js 问题会产生另一个问题

    多年来我一直在尝试弄清楚如何在我的 Rails 应用程序中使用谷歌地图 我目前正在尝试使用 Rails 5 我也一直在试图弄清楚如何让我的 javascript 在生产环境中工作 我最近对这些挑战的尝试概述于生产问题帖子 https sta
  • 如何为 MySQL 和 Postgres 编写不区分大小写的查询?

    我在本地运行 MySQL 数据库进行开发 但部署到使用 Postgres 的 Heroku Heroku 处理几乎所有事情 但我不区分大小写的 Like 语句变得区分大小写 我可以使用 iLike 语句 但我的本地 MySQL 数据库无法处
  • 如何通过Grape API获取路由

    我使用 gem grape 作为 api 我尝试通过命令获取 api urlrake grape routes namespace grape do desc routes task routes gt environment do API

随机推荐

  • 如何在画布上绘制圆的下半部分

    我正在尝试使用适当的 x cos theta y sin theta 函数绘制圆的下半部分 如果我将 theta 从 Math PI 迭代到 2 Math PI 我似乎得到了圆的上半部分 我在这段代码片段中做错了什么 window onlo
  • 如何使用 jest 和 TypeScript 模拟第三方 Nodejs 模块函数?

    我正在尝试模拟第三方节点模块中的函数 特别是fs readFileSync 功能 使用玩笑 那里有很多示例 但我还没有找到使用 TypeScript 的示例 我有一个简单的 希望是最小的例子 位于github https github co
  • .net 中的 [] 括号是什么? [复制]

    这个问题在这里已经有答案了 我在 C 中很少看到 这样的括号 但是当我开始学习 ASP NET 时 我已经看到它们很多次了 但我仍然无法理解它们的作用 它们不是用于数组的代码的一部分 例如 webmethods 就在方法之上 或者有一些在类
  • Android 10 后台扫描时有限制吗?

    Android 上的蓝牙扫描似乎有很多 隐藏功能 对于初学者来说 有一个 30 秒的限制 Android 7 0 ble扫描没有结果 https stackoverflow com questions 43114913 android 7
  • Python 缩进之谜

    为什么我会收到以下错误 最后print声明不应成为while loop gt gt gt while n gt 0 n n 1 print n print TO A File
  • 从给定的数据集 [纬度、经度、密度] 生成 KML 热图

    我希望构建一个静态 KML Google 地球标记 文件 该文件以 lat lon densis 元组的形式显示一些给定数据集的热图样式渲染 我拥有的一个非常简单的数据集是人口密度 我的要求是 必须能够输入给定纬度 经度的数据 必须能够指定
  • 为什么 solr RemoveDuplicatesTokenFilterFactory 不起作用?

    我的 schema xml 正在拆分产品名称 然后使用RemoveDuplicate 删除拆分后的重复单词
  • graph-tool 需要哪些安装依赖项/选项才能包含draw_hierarchy?

    我已经在 ubuntu 14 04 python 3 5 4 上安装了 graph tool 2 26 我可以使用图形工具 但它似乎不完整 例如我见过这个错误 AttributeError module graph tool draw ha
  • MvcContrib.MVC3-ci 和 Mvc.Contrib NuGet 包之间有什么区别?

    MvcContrib MVC3 ci 和 Mvc Contrib NuGet 包之间有什么区别 我看到它们有不同的依赖项 ci 有更多的下载 我假设我的 MVC3 项目需要 ci 但我如何解决这个问题 ci 是什么意思 据我收集的信息 MV
  • C# 中的三元运算符 (?:) 线程安全吗?

    考虑以下两种获得较大数字的替代方案currentPrice and 100 int price currentPrice gt 100 currentPrice 100 int price Math Max currentPrice 100
  • docker swarm init 无法选择 IP 地址错误

    尝试码头工人群 with 适用于 Mac 的 Docker 桌面 我试过这个 docker machine create d virtualbox node 1 docker machine create d virtualbox node
  • NSString:去掉 并为该段创建带有颜色的属性字符串?

    假设我有一个字符串 这是一个简单的字符串 我需要去掉 抱歉 b 和尖括号之间没有空格 由于某种原因预览没有显示它 同时将 simple 这个词加粗 我的想法是 将尖括号和 br 替换为空白 使 简单 段具有属性 问题是一旦标签被删除 我仍然
  • Eclipse Helios 不显示 Javadoc

    我最近买了一台新计算机 并在其中安装了 Eclipse Helios 之前 在我的旧计算机上 当我使用控制辅助 Ctrl 空格 并突出显示建议的方法时 该方法的 Javadoc 经常出现在控制辅助弹出窗口的一侧 其中包含方法描述和参数等 然
  • 锁定或保护 R 中的 data.table

    是否有一种或多种方法可以锁定或保护data table这样就不能再就地修改了 假设我们有一个 data table dt lt data table id 1 val foo dt id val 1 1 foo 然后我可以修改吗dt之后得到
  • Dockerfile - 中间容器到底在做什么?

    我有我的 Dockerfile 如下所示 FROM confluentinc cp kafka connect 4 0 0 ARG VERSION 0 0 2 15 RUN curl Ls https github com jcustenb
  • 在 C 编译时检查类型是结构体还是指针?

    注意 这是NOTPaul T 链接的问题的重复项 因为我问是否可以在编译时确定类型是否属于某种更广泛的不完整类型 种类 而不是在编译时是否已注册符号 这似乎是对这个问题的根本误解 我正在用 C 编写一个库 该库处理伪通用函数 该函数通过宏包
  • 水平滚动时保持树视图最左边的列可见

    我使用 ControlTemplate 和 GridViewRowPresenter 的堆栈面板在 WPF 中实现了带有列的树视图 我关注了这篇文章 http blogs msdn com b atc avalon team archive
  • 通过 Javascript 代码单击 HTML 表单的提交按钮

    我对WEB编程不太了解 所以请随时询问我是否遗漏了任何细节 有一个我经常访问的网站 它要求用户每次访问时都需要登录 对于这个网站的登录页面 我试图写下一个用户脚本 它将自动登录 我设法填写了表单字段 但不知道如何通过 JavaScript
  • 在 RESTful html 应用程序中将表单/替代视图放在哪里?

    我们假设一个 Web 应用程序为每个 URI 提供一个用于 GET 请求的漂亮 html 视图 并允许通过 POST PUT PATCH WHATEVER 更新底层资源 然后 我如何公开实际上允许从浏览器执行此类请求的各种表单 更广泛的是
  • Rails 4:.save 不会更新现有记录的updated_at?

    我一直以为 save and save 将更新updated at现有记录列 这不是真的吗 如果是这样 那么我是否需要创建一个 before save 过滤器以在每次保存时更新它 今天是 6 月 18 日 Loading developme