17

我试图before_save通过将“_was”添加到我的值来获得旧值,但它似乎不起作用。

这是我的代码:

before_save :get_old_title

def get_old_title
    puts "old value #{self.title_was} =>  #{self.title}"
  end

“title_was”和“title”都获得了刚刚保存的新标题。

是否有可能在里面获得旧值before_save

4

3 回答 3

12

您获得相同值的原因很可能是因为您在创建记录时检查了输出。回调在两者上before_save都被调用create()update()但在create()两者title上都title_was被分配了相同的初始值。所以答案是“是的,你可以得到里面的旧值before_save”,但你必须记住,只有当记录被实际更改时,它才会与当前值不同。这意味着您获得的结果是正确的,因为在创建记录时不会发生相关更改。

于 2017-03-09T20:14:35.387 回答
10

而不是before_save使用before_update. 它现在应该可以工作了。

于 2015-04-06T05:16:40.750 回答
6

因此,上面的答案可能有效,但是如果我出于某种原因想要获取先前的值并使用它来执行某些任务,那么您将需要获取先前的值。就我而言,我使用了这个

after_update do
  if self.quantity_changed?
    sku.decrement(:remaining, (self.quantity_was - self.quantity) * sku.quantity)
  end
end

_was 和 _changed?添加到任何列都可以完成工作。

于 2017-02-26T23:47:02.457 回答