Rails - 获取 before_save 中的旧值

Rails - Get old value in 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 中获取旧值?

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

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

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

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

你得到相同值的原因很可能是因为你在创建记录时检查了输出。回调 before_savecreate()update() 上都被调用,但在 create()titletitle_was 都被分配了相同的初始值。所以答案是 "yes, you can get the old value inside before_save" 但你必须记住,只有当记录实际更改时,它才会与当前值不同。这意味着您获得的结果是正确的,因为在创建记录时不会发生相关更改。