我试图通过在我的值中添加“_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
内获取旧值?
答案 0 :(得分:7)
而不是before_save
使用before_update
。它现在应该工作。
答案 1 :(得分:5)
获得相同值的原因很可能是因为您在创建记录时检查输出。 before_save
和create()
都会调用回调update()
,但create()
title
和title_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?添加到任何列中都可以完成工作。