作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用简单示例进行设置:我有 1 个表 (Totals
),其中保存每条记录的 amount
列的总和在第二个表(Things
)中。
当 thing.amount
更新时,我只想将旧值和新值之间的差值添加到 total.sum
中。
现在,我在 before_update
期间减去 self.amount
,并在 after_update
期间添加 self.amount
。这让我们对更新的成功过于信任。
约束:我不想简单地重新计算所有交易的总和。
问题:很简单,我想在 after_update
回调期间访问原始值。您想出了哪些方法来做到这一点?
更新:我同意 Luke Francl 的想法。在 after_update
回调期间,您仍然可以访问 self.attr_was
值,这正是我想要的。我还决定采用 after_update
实现,因为我想在模型中保留这种逻辑。这样,无论我决定将来如何更新交易,我都会知道我正在正确更新交易总和。感谢大家提出的实现建议。
最佳答案
这与每个人对交易的看法相同。
也就是说...
Rails 2.1 中的 ActiveRecord 会跟踪对象的属性值。因此,如果您有一个属性 total
,您将拥有一个 total_changed?
方法和一个返回旧值的 total_was
方法。
无需再向模型添加任何内容来跟踪此情况。
更新:这是 ActiveModel::Dirty 的文档按要求。
关于ruby-on-rails - 使用ActiveRecord,有没有办法在after_update期间获取记录的旧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/607069/
我是一名优秀的程序员,十分优秀!