2015-04-27 92 views

回答

1

如何:

class JournalEntry < ActiveRecord::Base 
    before_update { fail ActiveRecord::ReadOnlyRecord } 
end 

這將允許創建新的日誌條目,但如果你試圖保存,它就會失敗。

j = JournalEntry.new 
j.amount = "21.85" 
j.save 
# => true 
j.amount = "39.00" 
j.save 
# => ActiveRecord::ReadOnlyRecord 

另外,這種方法利用通過的ActiveRecord提供的readonly!方法:

class JournalEntry < ActiveRecord::Base 
    after_initialize { readonly! if persisted? } 
    after_create { readonly! } 
end 

然而,這兩種技術有一個缺點:他們不阻止你突變通過底層調用數據庫。例如,繞過驗證和回調的update_column將打敗這些只讀檢查。