2011-01-26 128 views
2

這是非常基本的,但不起作用。我想添加一個回調函數(after_save)來提升字段輸入。軌道上升

在我的模型,我有:

after_save :upcase_tax_label 

def upcase_tax_label 
    self.tax1_label.upcase! 
    self.tax2_label.upcase! 
end 

所以,當我編輯應該upcase價值和CAPS渲染。但不是。怎麼了?感謝您的幫助

+1

同意。奧利維爾,你更有可能讓人們繼續回答你接受他們答案的問題。 :) – Shaun 2011-01-26 22:00:53

回答

3

after_save將在模型已經保存到數據庫後運行upcase方法。換句話說,它只是在保存完成後提升內存中的對象屬性。這不是你想要的。

你想改用before_save,使該對象被寫入到數據庫之前的屬性upcased:

before_save :upcase_tax_label 

private 
def upcase_tax_label 
    tax1_label.upcase! 
    tax2_label.upcase! 
end 

底線是,你必須明確地保存在要做出的變化的模型數據庫。在那之前,你只是在玩內存中的一個對象。

1
before_save 

將工作。然而,在這種情況下編寫一個自定義setter通常被認爲是更好的風格。它看起來像這樣:

def tax1_label=(val) 
    write_attribute(:tax1_label, val.upcase) 
end 

def tax2_label=(val) 
    write_attribute(:tax2_label, val.upcase) 
end