2012-06-07 45 views
3

我想在保存事件之前檢查,以便每當特定字段得到更新時我都可以發出警報。 我試圖使用「更改」來檢測它,但update_attributes快捷方式數據庫驗證,所以我沒有辦法使用更改?如何防止update_attributes!快捷回調?

例如,這注意到了變化:

m = Player.new 
m.name = "Tom" 
m.changed? 
=> true 

但這並不:

m = Player.new 
m.update_attributes!(name: "John") 
m.changed? 
=> false 

任何想法如何,我可以做不同呢?

回答

2

changed?返回true如果在您的對象上有非持久性更改。打電話後,該對象是最新的 - 因此返回false。檢查ActiveModel::Dirty模塊,其中有幾個實用程序來處理對象的變化。 previous_changes可以做到這一點,也許有一個更適合你的用例的方法。

+0

呀,我試圖previous_changes和它的工作。但是我發現了Ruby元編程的更好選擇,我結束了m.name_changed? m.name_was –

2

請記住,changed?是指自上次保存點以來所做的更改。調用update_attributes!具有保存並應用更改的效果。

changed?方法和關聯調用將只返回尚未保存的東西。

0

你可以使用

m.attributes = {name: "John"}