我試圖在before_save
中爲我的值添加「_was」,但似乎不起作用。Rails - 在before_save中獲取舊值
這裏是我的代碼:
before_save :get_old_title
def get_old_title
puts "old value #{self.title_was} => #{self.title}"
end
兩個「title_was」和「稱號」得到了新的標題就是被保存。
before_save
可以得到舊值嗎?
我試圖在before_save
中爲我的值添加「_was」,但似乎不起作用。Rails - 在before_save中獲取舊值
這裏是我的代碼:
before_save :get_old_title
def get_old_title
puts "old value #{self.title_was} => #{self.title}"
end
兩個「title_was」和「稱號」得到了新的標題就是被保存。
before_save
可以得到舊值嗎?
而不是before_save
使用before_update
。它現在應該工作。
爲什麼不用'before_save'? – 2015-04-06 05:52:44
在對象創建時調用before_save(只有一次),而before_update每次調用對象時都會調用它。 – 2015-04-06 06:16:50
是的,@SachinR你是對的。 – sansarp 2015-04-06 06:18:34
所以,上面的答案可能會工作,但如果我想由於某種原因獲得以前的值並使用它來執行某個任務,那麼您將需要獲得以前的值。在我的情況下,我用這個
after_update do
if self.quantity_changed?
sku.decrement(:remaining, (self.quantity_was - self.quantity) * sku.quantity)
end
end
_was和_changed?添加到任何列將完成工作完成工作。
獲得相同值的原因很可能是因爲您在創建記錄時檢查輸出。在create()
和update()
上均調用回調before_save
,但在create()
上都爲title
和title_was
分配了相同的初始值。所以答案是:「是的,你可以得到before_save
中的舊值」,但是你必須記住,只有當記錄實際改變時,它纔會與當前值不同。這意味着您得到的結果是正確的,因爲創建記錄時不會發生有問題的更改。
在更新同一行數據之前,您是否想要獲取舊值? – sansarp 2015-04-06 04:41:30
是的,可以說我以前的價值是「蝙蝠俠」,並將其改爲「超人」,我想獲得「蝙蝠俠」 – user2037696 2015-04-06 04:43:13
而不是before_save使用before_update – sansarp 2015-04-06 04:52:38