有没有办法删除在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/