使用一个简单的示例进行设置:我有 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(使用前将#替换为@)