2015-04-27 56 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将打败这些只读检查。