Взгляните на AR источник обратных вызовов . По сути, он использует обратные вызовы ActiveModel , которые используют обратные вызовы ActiveSupport .
Существует много метапрограммирования, но в основном он вызывает все before_
обратные вызовы перед запуском правильного метода (для этого и нужен super
). Если вы хотите иметь возможность кодировать обратные вызовы так же легко, как ActiveRecord, используйте ActiveSupport. В противном случае вы можете пойти с чем-то вроде:
def method_with_callback
if !respond_to?(:before_callback) || before_callback
//method
after_callback if respond_to? :after_callback
end
end
Но подход ActiveSupport более модульный и более простой в обслуживании.