Не перезаписывать notify_observers. Патчить базовые классы - это действительно плохая идея. Вместо этого вам следует сделать следующее:
Вместо вызова экземпляра метода в вашей модели, который ограничен только именем метода, вызовите метод класса самостоятельно:
# Notify list of observers of a change.
def notify_observers(*arg)
observer_instances.each { |observer| observer.update(*arg) }
end
Он передает любые аргументы, которые вы передаете, методу #update вашего наблюдателя, который вы можете перезаписать внутри своего собственного класса наблюдателя.
По умолчанию не принимает никаких посторонних аргументов, но не слишком сложно:
def update(observed_method, object, &block) #:nodoc:
return unless respond_to?(observed_method)
return if disabled_for?(object)
send(observed_method, object, &block)
end
Так что просто добавьте это к своему наблюдателю, например:
def update(observed_method, object, *args)
return unless respond_to?(observed_method)
return if disabled_for?(object)
send(observed_method, object, *args)
end
def after_pay(payee, amount)
...
end
И звоните
Payee.notify_observers(:after_pay, payee, amount)