`
CaiDeHen
  • 浏览: 89809 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

#62 Hacking ActiveRecord

阅读更多
Have you ever wanted to temporarily disable all validations? Well, ActiveRecord doesn't support this, but that doesn't mean we can't add it. This episode will show you how to open up an existing class and change its behavior.
# test_helper.rb
class Test::Unit::TestCase
  self.use_transactional_fixtures = true
  self.use_instantiated_fixtures  = false
  
  def disable_validation
    ActiveRecord::Base.disable_validation!
    yield
    ActiveRecord::Base.enable_validation!
  end
end

module ValidationDisabler
  def self.included(base)
    base.class_eval do
      extend ClassMethods
      alias_method_chain :valid?, :disable_check
    end
  end
  
  def valid_with_disable_check?
    if self.class.validation_disabled?
      true
    else
      valid_without_disable_check?
    end
  end
  
  module ClassMethods
    def disable_validation!
      @@disable_validation = true
    end
    
    def enable_validation!
      @@disable_validation = false
    end
    
    def validation_disabled?
      @@disable_validation ||= false
    end
  end
end

class ActiveRecord::Base
  include ValidationDisabler
end
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics