ruby on rails-如何在包含的模块中删除验证集



有没有办法删除在Rails插件(或包含的模块)中设置的验证?假设我有一些包含模块的模型:

class User < ActiveRecord::Base
  include SomeModuleWithValidations
  # How to cancel validates_presence_of :something here?
end
module SomeModuleWithValidations
  def self.included(base)
    base.class_eval do
      validates_presence_of :something
    end
  end  
end

到目前为止,我唯一的想法是做一些类似的事情:

validates_presence_of :something, :if => Proc.new{1==2}

我认为这是可行的,但并不特别好看。

您可以重载类中的validates_recense_of。类似于:

def self.validates_presence_of(*args)
  return if args.first == :foo
 super
end

或者,如果你有validates_presence_of:foo,你可以做:

def foo
  self[:foo] || ""
end

然而,这些解决方案都不是很好。很可能在模块中取消注释它会更容易,或者仅在该模块中将它重新定义为无操作。

请参阅http://casperfabricius.com/site/2008/12/06/removing-rails-validations-with-metaprogramming/

相关内容

  • 没有找到相关文章

最新更新