2010-10-04 71 views
6

我有一個名爲Contact的模型,其屬性名爲phone_number。我有一些自定義的setter方法如如何在Rails中使用update_attributes和自定義setter方法?

def prefix=(num) 
    self.phone_number[3..5] = num 
end 

當我打電話@contact.update_attributes({:prefix => '510'}),我沒有得到任何錯誤和@contact得到改變,但變化不會使他們對數據庫的方式。我試過使用attr_accessible專門允許使用這些設置方法無濟於事。

有沒有辦法讓update_attributes爲我工作?我正在使用Rails 2.3.8。

回答

13

你必須告知軌已更改的屬性,你正在執行到位修改:

def prefix=(num) 
    phone_number_will_change! 
    self.phone_number[3..5] = num 
end 
+0

呸!每次都能讓我感到舒服。謝謝,Kandada。 – muirbot 2010-10-05 20:30:56

+0

如果您在方法的末尾調用'super num',則不需要'phone_number_will_change!'。 – Hendrik 2017-01-23 14:31:44

+0

@Hendrik這裏我們試圖更新字符串。所以它不會通過AR骯髒的基礎。實際的屬性是'phone_number',但你正在更新前綴。 'prefix'沒有'super',因爲它不是DB屬性。看看AR Dirty文檔:http://api.rubyonrails.org/classes/ActiveModel/Dirty.html – 2017-01-23 20:48:01

相關問題