rails のアクションに対するコールバックは、filter 機能を使うことで実現できます。
filter には、アクションの実行直前に動作をかます「before_filter」、アクションを実行し、レスポンスが生成された後に動作をかます「after_filter」があります。
これだと、アクション実行後とレスポンス生成の間に動作を挟むということはできません。でも今回必要だったので書きました。
before_render
- action_controller_ext.rb
module ActionController module Callbacks def self.included(klass) klass.extend(ClassMethods) end module ClassMethods def before_render(method, options = {}) self.class_eval <<-EOS protected def extend_render_with_callback def render(*args) #{method} super end self.class.send(:protected, :render) end EOS self.before_filter(:extend_render_with_callback, options) end end end end ActionController::Base.send(:include, ActionController::Callbacks)