【问题标题】:Activerecord callback, previous_changes vs. changesActiverecord 回调,previous_changes 与更改
【发布时间】:2017-07-10 15:54:06
【问题描述】:

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

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 是将要更改的内容,这意味着它在@987654326 中很有用@ 筛选。

我是不是误会了?

【问题讨论】:

    标签: ruby-on-rails-4 activerecord callback


    【解决方案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 => {}
    

    注意

    您也可以查看this answer 以获得更多帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      相关资源
      最近更新 更多