Хороший пример расширения ActiveRecord для обеспечения пропуска обратного вызова здесь: http://weareintegrum.com/?p=10
Идея состоит в том, чтобы создать метод ActiveRecord с именем skip_callback, который принимает блок:
def self.skip_callback(callback, &block)
method = instance_method(callback)
remove_method(callback) if respond_to?(callback)
define_method(callback){ true }
begin
result = yield
ensure
remove_method(callback)
define_method(callback, method)
end
result
end
Тогда все, что вы делаете внутри блока, не выполняет обратный вызов.