我们说我有以下型号:
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回调中无法实现的东西吗?
答案 0 :(得分:2)
在after_save
中,如果使用changes
方法,则会返回对象上所有更改的哈希值。您可以指定所需的属性更改。这将是一个数组。 [旧价值,新价值]
在您的示例中,它可以是self.p.changes["score"]
。这将返回一个数组[0, 1]
,其中0
是旧值,1
是新值