Rails - 在before_save中获取旧值

时间:2015-04-06 04:38:30

标签: ruby-on-rails before-save

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

这是我的代码:

before_save :get_old_title

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

“title_was”和“title”都获得了新标题。

是否可以在before_save内获取旧值?

3 个答案:

答案 0 :(得分:7)

而不是before_save使用before_update。它现在应该工作。

答案 1 :(得分:5)

获得相同值的原因很可能是因为您在创建记录时检查输出。 before_savecreate()都会调用回调update(),但create() titletitle_was都会分配相同的初始值。所以答案是"是的,你可以在before_save"中找到旧值。但是你必须记住,只有当记录实际改变时它才会与当前值不同。这意味着您获得的结果是正确的,因为在创建记录时,问题的变化不会发生。

答案 2 :(得分:1)

所以,上面的答案可能会有效,但如果我想出于某种原因获得之前的值并使用它来执行某些任务,那么你需要获得之前的值。就我而言,我使用了这个

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

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