【问题标题】:ignore before_update when save保存时忽略 before_update
【发布时间】:2010-10-22 02:53:46
【问题描述】:

某些情况下我不想执行 before_update。请帮我。

案例 A:如果我想使用 before_update

obj = Object.find(id)
obj.save

但是 case B 我不想在 before_update 之前使用

obj = Object.find(id)
obj.save # in case I want used before_update

【问题讨论】:

    标签: ruby-on-rails ruby activerecord save before-filter


    【解决方案1】:

    #save 方法接受选项的哈希。跳过验证:

    obj.save(:validate => false)
    

    这是使用公共 API 跳过验证的记录方法。不要尝试使用 send 来调用内部方法,否则您的应用程序将来可能无法运行。

    【讨论】:

      【解决方案2】:

      update_without_callbacks 和 create_without_callbacks 是私有方法。这些方法不会调用任何回调。

      obj = Object.find(id)
      obj.send(:update_without_callbacks)
      
      obj = Object.new(:name => 'foo')
      obj.send(:create_without_callbacks)
      

      【讨论】:

      • 不要这样做!这些方法是私有的是有原因的。您永远不应依赖内部 API,否则您的应用程序将无法在内部重构的情况下运行。
      • 仅适用于 Rails 2。查看此answer
      猜你喜欢
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多