2008-09-26 94 views
12

我的發票模型有一個address_id屬性,我不希望這個address_id改變FOREVER。所以,我不希望這給類以外的發生:如何保護Rails模型屬性?

invoice.address_id = 1 
invoice.address = some_address 

Rails的自動將此ADDRESS_ID屬性,從發票表的模型,所以我怎麼能這樣聲明屬性爲私有/保護?調用

attr_protected :address_id 

很可能不是解決方案,因爲它基於文檔只能防止批量分配。

謝謝!

回答

19

你想attr_readonly

+0

這不會阻止Rails更新並將模型保存回數據庫嗎? – Gishu 2008-09-26 03:13:47

3

不一樣漂亮的一個套,但低於代碼應工作(和你總是可以做一些元編程寫一個「一成不變」的方法)

def address_id=(id) 
    if new_record? 
    write_attribute(:address_id, id) 
    else 
    raise 'address is immutable!' 
    end 
end