我已經阻止更新某些車型通過在模型中使用這樣的:如何禁止更新,除了一個字段?
def update
self.errors.add_to_base("Cannot update a #{ self.to_s }")
end
我現在寫一個插件,提供一些額外的功能模型,我需要在更新一個場模型。如果我不使用插件我會這樣直接在模型...
def update
if self.changed == ['my_field']
super
else
self.errors.add_to_base("Cannot update a #{ self.to_s }")
end
end
我不能做同樣的從我的插件,因爲我不知道如果更新行爲是默認的ActiveRecord或者已被覆蓋以防止更新。是否有另一種方法來阻止記錄更新,同時允許我重寫特定的字段(並且僅在插件應用於此模型的情況下)。
謝謝。我意識到需要我的prevent_update邏輯的模型也是那些需要插件的模型,所以我已經將整個插件移動到插件中,使用像您所建議的那樣的before_update過濾器。 – Nick 2010-11-19 04:32:48
在rails 3. *中,通過'self.errors.add:base,「添加錯誤,」無法更新...「# – ronen 2012-07-10 14:28:34
我想你可能希望if子句可以返回true,如果self.changed | self。 updatabale_attributes == self.updatabale_attributes',這樣你也可以更新updatable_attributes的一個子集。 – Timo 2014-04-05 06:24:00