2015-07-02 4 views
3

Ниже я могу успешно добавить проверку во время выполнения для Mongoid:Удаление проверки во время выполнения

class Abc 
    include Mongoid::Document 
    field :something, type: String 
end 

a = Abc.new 
a.valid? 
=> true 

Abc.class_eval do 
    validates_presence_of :something 
end 
=> [Mongoid::Validatable::PresenceValidator] 
b = Abc.new 
=> #<Abc _id: 55948e466d616344a4010000, something: nil> 
b.valid? 
=> false 

Как удалить валидацию? Если возможно, я предполагаю, что это будет одинаково для ActiveRecord и Mongoid.

Я ищу что-то вроде этого:

Abc.class_eval do 
    remove_validates_presence_of :something 
end 

ответ

1

я думаю, что вы найдете то, что вы хотите в этом блоге: http://gistflow.com/posts/749-canceling-validations-in-activerecord

принципе, валидаторы информации в классе переменной _validators , и вы можете позвонить skip_callback, чтобы отменить его.
Таким образом, вы должны быть в состоянии удалить его с

validators = Abc._validators[:something] 
v = validators.first 
validators.delete v 
filter = Abc._validate_callbacks.find { |c| c.raw_filter == v }.filter 
skip_callback :validate, filter 
+0

Да это на самом деле работы. – Donato

Смежные вопросы