Activerecord回调,previous_changes与更改

jay*_*del 1 activerecord callback ruby-on-rails-4

我试图了解这两种方法之间的区别是什么.以下是每个文档:

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_*过滤器.

我误解了吗?

Nim*_*pta 10

是的你理解它是正确的

这些是脏对象方法

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 => {}
Run Code Online (Sandbox Code Playgroud)