Rails - 如何从after_save回调中查看旧模型值和新模型值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails - 如何从after_save回调中查看旧模型值和新模型值?相关的知识,希望对你有一定的参考价值。

假设我有以下型号:

class V < ActiveRecord::Base
  belongs_to :p
  after_save :after_save_v
  ...
end

class P < ActiveRecord::Base
  has_many :vs
  # Has an attribute called "score" (defined in the DB table)
  ...
end

创建一个V会使v.p.score增加1.现在在我的after_save_v中,我想跟踪p.score的旧值。我怎样才能做到这一点?

使用p.score_was不起作用。

class V < ActiveRecord::Base
  def after_save_v
    puts p.score_was # => 1
    puts p.score # => 1
  end
end

我在这里错过了什么?或者这是after_save回调无法实现的?

答案

after_save中,如果使用changes方法,它将返回对象上所有更改的哈希值。您可以指定所需的属性更改。这将是一个数组。 [旧价值,新价值]

在您的示例中,它可以是self.p.changes["score"]。这将返回一个数组[0, 1],其中0是旧值,1是新值

以上是关于Rails - 如何从after_save回调中查看旧模型值和新模型值?的主要内容,如果未能解决你的问题,请参考以下文章

Rails after_save 回调未触发

具有虚拟属性的 after_save 回调 Rails 3

Rails ActiveRecord 在 after_save 回调中使用最近保存的记录 ID [关闭]

Rails after_save 错误

插入后的 Rails 回调

Rails 3:取消在 after_save 上的插入