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

时间:2014-11-19 04:27:01

标签: ruby-on-rails ruby-on-rails-3.2

我们说我有以下型号:

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回调中无法实现的东西吗?

1 个答案:

答案 0 :(得分:2)

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

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