2014-02-24 4 views
1

Например, если у меня есть этот обратный вызов:Как вы регистрируете вызываемые методы обратного вызова?

after_create :notify_users 

Когда что называется, как я могу войти что-то вроде «метод notify_users вызывается» в моем файле журнала?


У меня на самом деле есть несколько обратных вызовов в моем приложении. Я знаю, что я могу добавить что-то вроде puts 'notify_users method is being called' внутри метода notify_users, но есть ли способ автоматически регистрировать все обратные вызовы?

+0

Возможный дубликат [Tracking/Logging ActiveRecord Обратные вызовы] (http://stackoverflow.com/questions/13089936/tracking -logging-activerecord-callbacks) –

ответ

1

Подумайте об этом:

module Log 
    def log *args 
    args.each do |m| 
     alias_method m.to_s + '_old', m 

     define_method m do |*args| 
     send(m.to_s + '_old', *args) 
     puts "#{m} is called" 
     end 
    end 
    end 
end 

class C 
    def m1 
    puts 'm1' 
    end 

    def m2 
    puts 'm2' 
    end 

    extend Log 

    log :m1, :m2 
end 

C.new.m1 
C.new.m2 

Обеспечивает:

m1 
m1 is called 
m2 
m2 is called 
+0

Спасибо, Сперанский. Мои обратные вызовы на самом деле вызываются во многих разных файлах. Вы знаете, могут ли имена методов обратного вызова вызывать автоматически, независимо от того, где они вызваны, или мне нужно добавить сообщение puts внутри каждого метода обратного вызова? – sjsc

+0

Я ценю этот подход Сперанского. Я попробую. Огромное спасибо :) – sjsc

3
def notify_users 
    logger.info "notify_users method is being called" 
end 
+0

Спасибо. На самом деле у меня есть несколько обратных вызовов. Есть ли способ сделать это динамически для всех вызываемых обратных вызовов вместо добавления «logger.info ..» для каждого обратного вызова? – sjsc

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

  • Нет связанных вопросов^_^