2010-07-13 3 views
2

Gem Я использую вставки обратный вызов after_save, который я хотел бы удалить. Мне кажется, было бы проще удалить символ из массива, чем исправить проблему с помощью monkeypatch. Как я могу получить доступ к массиву обратных вызовов?Как удалить обратные вызовы, вставленные кодом поставщика?

ответ

8
class UserSession < Authlogic::Session::Base 
    # Don't use cookie AuthLogic behaviour 
    skip_callback :persist, :persist_by_cookie 
    skip_callback :after_save, :save_cookie 
    skip_callback :after_destroy, :destroy_cookie 
end 
+0

спасибо - это выглядит намного лучше, чем мое решение :-) Я нахожусь на проекте rails 2, хотя, скоро перейдя на рельсы 3, я попробую. –

+0

Только что реализовано, отлично работает! –

+3

Для меня (рельсы 3.1) мне пришлось использовать 'skip_callback: destroy,: after,: destroy_cookie' (перефразируя для моего собственного прецедента) – iainbeeston

2

after_save массив доступен через Model.after_save, это массив объектов ActiveSupport::Callbacks::Callback. Вы можете запустить это изнутри модели

self.after_save.delete_if{|callback| callback.method == :do_something_callback} 
+0

выглядит хорошо ... но где/когда бы мне это делать? В пределах определения класса? –

+1

Я бы так сказал, с вашими другими обратными вызовами. Пока он загружается после вашего плагина, тогда должно быть хорошо идти. –

+0

Если вам интересно, вот решение, в котором я столкнулся, для моей конкретной проблемы: http://stackoverflow.com/questions/3162867/how-can-i-get-authlogic-to-use-the-rails-session -instead-of-its-own-cookie –

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