Ответ от aVenger имеет проблемы, когда вы объявляете проверки более одного атрибута в строке:
validates :name, :message, :presence => true
Это потому, что эта строка создает raw_filter с более чем одним атрибутом в фильтре атрибутов:
Model.send(:_validate_callbacks)
=> [#<ActiveSupport::Callbacks::Callback:0xa350da4 @klass=Model(...), ... , @raw_filter=#<ActiveModel::Validations::PresenceValidator:0x9da7470 @attributes=[:name, :message], @options={}>, @filter="_callback_before_75", @compiled_options="true", @callback_id=76>]
Мы должны удалить требуемый атрибут из этого массива и отклонить обратные вызовы без атрибутов
Dummy.class_eval do
_validators.reject!{ |key, _| key == :field }
_validate_callbacks.each do |callback|
callback.raw_filter.attributes.delete :field
end
_validate_callbacks.reject! do |callback|
callback.raw_filter.attributes.empty? ||
callback.raw_filter.attributes == [:field]
end
end
У меня это работает в приложении Rails 3.2.11.