2016-05-22 2 views
2

У меня есть свое приложение. И я использую драгоценный камень. Этот камень имеет, например, модель пользователя.Как добавить обратный вызов для модели драгоценного камня?

Как я могу добавить свой пользовательский обратный вызов (after_save) для модели пользователя (который определен в gem without и callback для этой модели)?

ответ

0

Вы могли бы быть в состоянии сделать это, используя инициализатор, обезьяна-латание в User классе в камне:

# config/initializers/some_gem.rb 
module SomeGem 
    class User 
    after_save :my_callback 

    private 
    def my_callback 
     ... 
    end 
    end 
end 
+0

У меня ошибка при попытке использовать ваш пример (я изменил SomeGem to MyNagios и User to Check) - '.../config/initializers/my_nagios.rb: 3: in' ': undefined method 'after_update' для MyNagios :: Check: Class (NoMethodError)' Я стараюсь add collback для этого класса - [link] (https://github.com/vintyara/my_nagios/blob/master/app/models/my_nagios/check.rb) –

+0

Да, я понимаю, почему я забыл добавить 'Check < ActiveRecord :: Base' :) Спасибо! –

+0

Проверьте еще раз. С данным решением я полностью переписываю класс Check и теряю все существующие методы, поэтому после проверки класс имеет только один метод - my_callback :( –

0

Вы можете сделать это с помощью обезьяны-Патчения класса пользователя в инициализаторе, как уже описаны в this answer.

В качестве альтернативы, вы можете использовать rails-observers драгоценный камень, чтобы сохранить свою логику за пределами внешних классов третьих сторон:

классов наблюдателей реагировать на обратные вызовы жизненного цикла для реализации триггера поведения как вне исходного класса. Это отличный способ уменьшить беспорядок, который обычно возникает, когда класс модели обременен функциональностью, не относящейся к основной ответственности класса