ruby-on-rails – 除了一个字段外,我如何禁止更新?

我一直在通过在模型中使用这些模型阻止某些型号的更新:
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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...