2008-11-04 2 views
2

Есть ли способ отклонить проверку, установленную в плагине 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} 

, которая будет работать, я думаю, но это не так в частности симпатичный.

ответ

1

Вы можете перегрузить validates_precense_of в классе. Что-то вроде:

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

Или, если вы validates_presence_of: Foo вы могли бы сделать:

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

Однако ни одно из этих решений не очень приятно. Скорее всего, было бы проще просто раскомментировать его в модуле или переопределить его в no-op только в этом модуле.