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_save
在 create()
和 update()
上都被调用,但在 create()
上 title
和 title_was
都被分配了相同的初始值。所以答案是 "yes, you can get the old value inside 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_save
在 create()
和 update()
上都被调用,但在 create()
上 title
和 title_was
都被分配了相同的初始值。所以答案是 "yes, you can get the old value inside before_save
" 但你必须记住,只有当记录实际更改时,它才会与当前值不同。这意味着您获得的结果是正确的,因为在创建记录时不会发生相关更改。