ruby-on-rails - 禁用 ActiveModel 回调

标签 ruby-on-rails ruby callback activemodel

我发布了 an article on disabling ActiveModel callbacks ,但我不完全确定这是执行此类操作的最漂亮方法。

Mongoid::Timestamps 添加了一个更新 updated_at 字段的保存前回调。假设在某些情况下我不希望这样,并且我禁用了这样的回调:

class User
  # I'm using Mongoid, but this should work for anything based on 
  # ActiveModel.
  include Mongoid::Document
  include Mongoid::Timestamps

  def sneaky_update(attributes)
    User.skip_callback(:save, :before, :set_updated_at)
    User.update_attributes(attributes)
    User.set_callback(:save, :before, :set_updated_at)
  end

end

调用 skip_callback 然后调用 set_callback 再次设置已删除的回调是不是一个坏主意?你会怎么做? :)

最佳答案

这个怎么样?

module Mongoid
  module Timestamps
    attr_accessor :skip_updated_at

    def set_updated_at_new
      unless self.skip_updated_at
        set_updated_at_org
      end
    end

    alias set_updated_at_org set_updated_at
    alias set_updated_at set_updated_at_new
  end
end

class User
  # I'm using Mongoid, but this should work for anything based on 
  # ActiveModel.
  include Mongoid::Document
  include Mongoid::Timestamps

  def sneaky_update(attributes)
    self.skip_updated_at = true
    User.update_attributes(attributes)
    self.skip_updated_at = false
  end

end

关于ruby-on-rails - 禁用 ActiveModel 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3704915/

相关文章:

ruby-on-rails - Rspec 使用开发数据库

ruby-on-rails - Rails 不允许我提前 30 天以上设置 'date' 字段 - 帮助 - Rails 3.0

ruby - 从命令行更容易使用 ruby​​gems?

ruby-on-rails - 使用 xml 构建器的 Rails 3.2 XML 渲染

ruby-on-rails - Rails - 自动创建关联模型

c++ - 哪个线程调用了windows proc回调函数?

Java使用接口(interface)作为回调

java - 是否有必要在分离时将 Fragment 接口(interface)监听器设置为 null?

ruby-on-rails -::有什么作用?

ruby-on-rails - Ruby on Rails - Stripe - 未提供 API key