ruby-on-rails – 除了一个字段外,我如何禁止更新?
发布时间:2020-12-16 20:09:46 所属栏目:百科 来源:网络整理
导读:我一直在通过在模型中使用这些模型阻止某些型号的更新: def update self.errors.add_to_base( "Cannot update a #{ self.to_s }" )end 我现在正在编写一个插件,为模型提供一些额外的功能,我需要更新模型中的一个字段.如果我没有使用插件,我会直接在模型中这
我一直在通过在模型中使用这些模型阻止某些型号的更新:
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默认值,或已被覆盖以防止更新.是否有另一种方法来阻止记录更新,同时允许我覆盖一个特定的字段(只有在我的插件应用于此模型的实例中). 解决方法
首先,您应该为这种事情使用before_update回调,而不是覆盖更新.其次,您可以将可更新属性存储在模型上,然后使用插件进行更新.我只是在浏览器中写了这个,可能是错误的.
attr_accessor :updatable_attributes before_update :prevent_update private def prevent_update return true if self.changed == self.updatable_attributes self.errors.add_to_base "Cannot update a #{ self.to_s }" false end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |