我试图了解这两种方法之间的区别是什么。以下是每个文档:
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_*
过滤器中很有用。
我误解了这个吗?
答案 0 :(得分:8)
是的,你理解正确
这些是脏对象方法
changes
用于了解尝试保存对象时发生的更改
previous_changes
用于了解保存对象所反映的更改。
但是如果您尝试重新加载对象,changes
和previous_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 => {}