2015-04-06 70 views
6

我試圖在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可以得到舊值嗎?

+0

在更新同一行數據之前,您是否想要獲取舊值? – sansarp 2015-04-06 04:41:30

+0

是的,可以說我以前的價值是「蝙蝠俠」,並將其改爲「超人」,我想獲得「蝙蝠俠」 – user2037696 2015-04-06 04:43:13

+1

而不是before_save使用before_update – sansarp 2015-04-06 04:52:38

回答

5

而不是before_save使用before_update。它現在應該工作。

+0

爲什麼不用'before_save'? – 2015-04-06 05:52:44

+1

在對象創建時調用before_save(只有一次),而before_update每次調用對象時都會調用它。 – 2015-04-06 06:16:50

+0

是的,@SachinR你是對的。 – sansarp 2015-04-06 06:18:34

0

所以,上面的答案可能會工作,但如果我想由於某種原因獲得以前的值並使用它來執行某個任務,那麼您將需要獲得以前的值。在我的情況下,我用這個

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

_was和_changed?添加到任何列將完成工作完成工作。

1

獲得相同值的原因很可能是因爲您在創建記錄時檢查輸出。在create()update()上均調用回調before_save,但在create()上都爲titletitle_was分配了相同的初始值。所以答案是:「是的,你可以得到before_save中的舊值」,但是你必須記住,只有當記錄實際改變時,它纔會與當前值不同。這意味着您得到的結果是正確的,因爲創建記錄時不會發生有問題的更改。