使用ActiveRecord,有没有办法在after_update期间获取记录的旧值

2024-04-25

使用一个简单的示例进行设置:我有 1 张桌子(Totals) 保存了总和amount第二个表中每条记录的列(Things).

When a thing.amount更新后,我想简单地将旧值和新值之间的差异添加到total.sum.

现在我正在减去self.amount during before_update并添加self.amount during after_update。这让我们对更新的成功过于信任。

约束:我不想简单地重新计算所有交易的总和。

问题:很简单,我想在after_update打回来。你想出了什么方法来做到这一点?

Update:我同意卢克·弗兰克尔的想法。期间after_update回调您仍然可以访问self.attr_was价值观这正是我想要的。我也决定去after_update实现,因为我想在模型中保留这种逻辑。这样,无论我决定将来如何更新交易,我都会知道我正在正确更新交易总和。感谢大家提出的实施建议。


大家对交易的看法也是如此。

那是说...

Rails 2.1 中的 ActiveRecord 会跟踪对象的属性值。所以如果你有一个属性total,你将会有一个total_changed?方法和一个total_was返回旧值的方法。

无需再向模型添加任何内容来跟踪这一点。

Update:这是文档ActiveModel::脏 http://api.rubyonrails.org/classes/ActiveModel/Dirty.html按照要求。

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

使用ActiveRecord,有没有办法在after_update期间获取记录的旧值 的相关文章

  • Capybara+Selenium:如何在集成测试代码中初始化数据库并使其在 Rails 应用程序中可见?

    配置 使用 RSpec Capybara Selemium 驱动程序 SQLite 数据库对 Rails 项目进行集成测试 情况 我与 Capybara 和默认的rack test 驱动程序进行了一些集成测试 他们直接在数据库中创建用户注册
  • 如何将参数传递给 ActiveModel 序列化器

    我在用着主动模型序列化器 https github com rails api active model serializers 我有一个模型活动 其中有很多活动 我想返回前 n 个活动的事件 我想我应该将参数 n 传递给事件序列化器 版本
  • 您的捆绑包已锁定到 rake (12.0.0),但在 Gemfile 中列出的任何源中都找不到该版本。

    启动 Rails 服务器时收到以下错误消息 您的捆绑包已锁定到 rake 12 0 0 但在 Gemfile 中列出的任何源中都找不到该版本 如果您没有更改源 则意味着 rake 12 0 0 的作者已将其删除 您需要将捆绑包更新到尚未删除
  • 如何从 ActionMailer 发送签名电子邮件?

    我使用 GMail 作为我的 SMTP 服务器 我的配置工作得很好 config initializers action mailer rb ActionMailer Base smtp settings tls gt true addre
  • Heroku上传-预编译资产失败

    我需要帮助 当尝试将我的应用程序上传到heroku时 我收到此错误 有人知道为什么吗 有几个是错的 谢谢 Using rake 10 1 0 Using tlsmail 0 0 1 Using uglifier 2 1 2 Your bun
  • 载波扩展白名单不工作

    这是一个类似的案例 但没有解决方案CarrierWave extension white list 似乎不起作用 https stackoverflow com questions 11348510 carrierwave extensio
  • # 的未定义方法“type_cast”(NoMethodError)

    ActiveRecord ConnectionAdapters Column曾经有一个方法叫做type cast它接受一个字符串并将其转换为 到适当的实例 这似乎在某个时候被删除了 我不知道应该做什么来替换它 这是使用它的代码 Create
  • after_save 回调将 Updated_by 列设置为 current_user

    我想使用 after save 回调将 Updated by 列设置为 current user 但 current user 在模型中不可用 我该怎么做 您需要在控制器中处理它 首先对模型执行保存 如果成功则更新记录字段 Example
  • ruby - 数组元素之间的排列

    我正在使用 ruby 在 Google Sketchup 中编写一个插件 在尝试排列数组中存在的两个数组时遇到了一个真正的问题 所有这些都取决于用户组合 我有一个数组数组 例如 1 lol so 当我们有这样的组合 1 2 3 没关系 它应
  • Rails form_for :remote=>true 没有调用 js 方法

    我不知道为什么这不起作用 我正在学习 Rails 我正在关注一本书 它说要这样做 div class field div div class field div
  • 文件上传字段导致 ActionController::InvalidAuthenticityToken 异常

    使用 Rails 4 并尝试使用 simple form 和回形针将文件字段添加到现有表单 这是表格的关键部分 一切正常 除非我实际提交带有上传文件的表单 然后 我得到这个 ActionController InvalidAuthentic
  • 预编译 Rails 5 以包含所有资源

    我正在尝试预编译所有资产以进行生产 当我跑步时RAILS ENV production bundle exec rake assets precompile并非我的所有资源都经过预编译 我尝试过使用其他人在其他类似问题中建议的方法 但它们对
  • 在 sidekiq 上配置 redis 身份验证

    我想我错过了一些东西 因为我在文档中找不到如何编写 redis 实例的用户名和密码以与 sidekiq 一起使用 有没有办法做到这一点 或者是通过 ENV 变量 Sidekiq 将无法识别的 Redis 选项直接传递给 Redis 驱动程序
  • has_one 有两个外键?

    我有两个类 消息 和 用户 消息具有 sender id 和recipient id 这两个用户的外键 如何建立关系 使我能够获取发件人和收件人的用户 例如 message sender name 和 message recipient n
  • Rails 形式的当前日期

    我正在学习 Rails 并在书外进行一些探索 并随着知识的增长创建一个具有附加功能的简单应用程序 我正在编写一个简单的博客应用程序 我在表单中添加了一个名为 日期 的字段 我不希望这是一个字段 我希望它从服务器获取日期并将其自动放入数据库中
  • Capistrano 部署:从独角兽开始

    使用 capistrano 进行部署 一切都很顺利 然后当部署 启动 在部署 冷期间 时 它会产生错误 32m2013 03 14 15 03 05 executing deploy start 0m 33mexecuting etc in
  • Keras 中的 model.fit() 和 model.evaluate() 有什么区别?

    我使用 Keras 和 TensorFlow 后端来训练 CNN 模型 之间是什么model fit and model evaluate 我应该最好使用哪一种 我在用model fit 截至目前 我知道的用处model fit and m
  • Fixture_file_upload 有 {file} 不存在错误

    下面是我的上传文件的测试代码 describe file process do before each do debugger file fixture file upload test csv text csv end it should
  • 根域上的 Heroku SSL

    我正在尝试为我的 heroku 应用程序设置 SSL 我正在使用基于主机名的 SSL 插件 赫罗库文档 http devcenter heroku com articles ssl customdomain ssl wwwyourdomai
  • 如何在 Rails 中两次加入相同的 2 个模型?

    我有一个带有国家 地区首选项的应用程序 用户将有两种类型的国家偏好 事件和研究 未来可能还会有更多 我更倾向于使用 2 个表来表示这一点 而不是使用 STI 我在优雅地配置 Rails 来执行此操作时遇到了一些麻烦 我可以破解它 但我宁愿按

随机推荐

  • 使用 Tesseract OCR 和 python 进行数字识别

    我使用 Tesseract 和 python 读取数字 从能量计 除了数字 1 之外 一切都运行良好 Tesseract 无法读取 1 数字 This is the picture I send to tesseract tesseract
  • 仅调整 matplotlib 中两个子图之间的距离

    我有 3 个子图 3 行和 1 列 我们可以用fig subplots adjust hspace 0 2 调整子图之间的距离 这将改变所有情况下子图之间的距离 地块 1 311 和地块 2 312 以及地块 2 312 和地块 3 313
  • R 堆积百分比频率直方图以及基于聚合数据的百分比

    I believe my question is very similar to this post https stackoverflow com questions 34903368 how to center stacked perc
  • sqlite 语句中返回的行数

    有没有简单的方法来获取 sqlite 语句返回的行数 我不想首先经历执行 COUNT 的过程 谢谢 每次致电时sqlite step 将变量加 1 如果你想要行数提前 那么就没有简单的方法了
  • 当对象的状态发生变化时触发Java中的事件

    我有一个 Java 对象 其状态随着时间的推移而变化 当对象中的某个字段达到特定值时 我希望触发外部事件 我知道 Swing 通过监听器处理这种模式 并且我在这个项目中使用 Swing 但我不确定哪种监听器适用于这种情况 用户不会更改对象的
  • Excel VBA 自动生成电子表格

    我和我的朋友目前有一个主电子表格 我需要定期将其分解为较小的电子表格 这曾经是一个手动过程 但我想将其自动化 我在 VBA 中创建了一个三步解决方案 它将帮助我完成以下任务 将相关过滤器应用于电子表格 将过滤后当前可见的数据导出到新电子表格
  • Sphinx——结合自动模块和自动类

    除非我错过了什么 斯芬克斯的automodule只会记录模块的成员 而不记录该模块中定义的类的属性 有办法吗自动地得到的行为automodule and autoclass以这样的方式组合 我可以自动获取模块成员的文档and在该模块中找到的
  • java - Google Play 游戏服务

    Google Play 游戏服务正在测试 public class MainActivity extends BaseGameActivity public void onCreate Bundle savedInstanceState s
  • 如何在javascript中将两个大数相加?

    我有两个文本框 每个将接受最多千位数字的输入 现在我想将这两个数字相加 我的问题是我应该使用什么数据类型来存储结果 我已经尝试过这个 但我得到的结果是指数形式的 如何存储结果并显示 这是另一种解决方案 因为它更快 更干净 function
  • Kendo 网格列宽度 + 可滚动

    我正在尝试从 JavaScript 绑定到可滚动剑道网格 但在列宽方面遇到了一些问题 这fiddle http jsfiddle net mnTGm 1 演示了问题 问题末尾的代码 我在 html 中指定标头并向其中一个标头添加宽度 然后
  • 为什么属性初始值设定项不调用自定义设置器?

    来自Kotlin 文档 https kotlinlang org docs reference properties html getters and setters 允许自定义设置器 class Test var stringRepres
  • 新的 ASP.NET Web 应用程序:有一个可以执行某些操作的登录按钮 - 但是,神奇之处在哪里呢?

    请原谅我对这个问题有点缺乏 ASP NET 知识 场景如下 我正在 VS2010 中玩 我创建了一个新的ASP NET Web Application 在 Visual C Web 模板下 没什么特别的 只是一个基本的网络应用程序 没有花哨
  • Django 单元测试:AttributeError:“WSGIRequest”对象没有属性“user”

    运行测试时 我输出以下错误 用户 self request user AttributeError WSGIRequest 对象没有属性 user 我尝试过从MIDDLEWARE to MIDDLEWARE CLASSES反之亦然 目前 我
  • 如何从 Oracle 中的日期中减去小时数,以便它也影响当天

    我正在尝试从 Oracle 中减去日期 这样它甚至也会影响这一天 例如 如果 时间戳是 01 June 2015 00 小时 如果我减去 2 小时 我希望能够转到 31 May 2014 22 小时 I tried to char sysd
  • 使用递归求数组的最小值?

    好吧 所以我一直在尝试用 Java 来理解递归 我可以完成简单的任务 例如求和 反转等 但我一直在努力做这个练习 我试图使用递归找到数组中的最小数字 但始终得到 0 0 的答案 我对递归的理解是 我需要增加一个元素 然后提供一个结束递归的基
  • 如何配置适用于 Node.JS 的 AWS S3 SDK 以与 localhost 一起使用?

    我正在尝试使用fakes3 https github com jubos fake s3作为我编写的一些简单 S3 代码的端点 但我无法超越连接阶段 当前的错误是 NetworkingError getaddrinfo ENOTFOUND
  • gprof 报告没有累积时间

    我正在尝试在运行 OSX 10 5 7 的计算机上使用 gprof 分析 C 应用程序 我以通常的方式使用 g 进行编译 但使用 pg 标志 运行应用程序并尝试使用 gprof 查看调用图 不幸的是 我的调用图包含所有时间列的全零 被调用
  • javadoc从类中排除一些公共方法

    我必须将类的一些公共方法排除在 javadoc 之外 我尝试了 Chris Nokleberg 的 ExcludeDoclet sixlegs 但 doclet 给出了一个小问题 如果类中的其他方法返回 List 或任何其他泛型 返回类型不
  • 使用 powershell 解决程序集依赖关系引用

    我正在尝试使用 PowerShell v4 0 x86 64 针对我们的内部 API 之一来执行一些相当基本的操作 但我似乎无法克服依赖项加载 到目前为止我有 Reflection Assembly LoadFrom C Users Dav
  • 使用ActiveRecord,有没有办法在after_update期间获取记录的旧值

    使用一个简单的示例进行设置 我有 1 张桌子 Totals 保存了总和amount第二个表中每条记录的列 Things When a thing amount更新后 我想简单地将旧值和新值之间的差异添加到total sum 现在我正在减去s