ActiveRecord的回调,previous_changes与变化(Activerecord c

2019-09-29 04:17发布

我想了解这两种方法之间的区别是什么。 下面是每个文档:

https://apidock.com/rails/v4.2.7/ActiveModel/Dirty/previous_changes

https://apidock.com/rails/v4.2.7/ActiveModel/Dirty/changes

在我看来,阅读本文档,经过previous_changes是后的变化完成后,在什么意义变更after_*过滤器,而changes是什么将被改变,这意味着它是一个有用的before_*过滤器。

我误解呢?

Answer 1:

是的,你的理解是正确

这些脏对象的方法

changes是用于了解,如果你尝试保存的对象会发生变化previous_changes是用于了解反映通过保存对象的变化。

但是,如果你尝试重新加载对象既changesprevious_changes将返回空哈希{}作为记录的新副本正在从数据库中提取

例如,用户(ID:1,名称: 'Nimish',年龄:24,电子邮件: 'test@example.com')

user = User.find(1)
user.changes #Will output => {}
user.previous_changes #Will output => {}
user.name = 'Test User'
user.changes #Will output => {name: ['Nimish', 'Test User']}
user.previous_changes #Will output => {}
user.save
user.changes #Will output => {}
user.previous_changes #Will output => {name: ['Nimish', 'Test User']}
user.reload
user.changes #Will output => {}
user.previous_changes #Will output => {}


文章来源: Activerecord callback, previous_changes vs. changes