- rescue_fromの前に割り込んでerorrオブジェクトをごにょごにょする
ApplicationController::Rescueのprocess_actionをoverride- rescue_fromで登録したハンドラにerrorオブジェクトが渡される前に特定のメソッドを呼んでerrorオブジェクトに触れるようにする
適当に斜め読みした感じだと
- rescue_fromでハンドラを登録(ActiveSupport::Rescuable)
- ActionControllerのprocessが実行されたときにraiseしたら登録されたハンドラを使って処理できないか試す。多分起点はここ
- raiseされたエラーオブジェクトのクラスに一致するハンドラが登録されてないかチェック(ActiveSupport::Rescuable)
- 一致するハンドラがあったらそのハンドラを使ってエラーを処理する(ActiveSupport::Rescuable)
actionpack/lib/action_controller/metal配下のモジュールは全部まとめてactionpack/lib/action_controller.rbでautoloadされている。ここ- Controllerの処理の起点は
actionpack/lib/abstract_controller/base.rbに定義されているAbstractController::Base#process(action, *args) AbstractController::Base#process(action, *args)の中で実行されているAbstractController::Base#process_action(method_name, *args)をmoduleなどでoverrideすることで処理を割り込ませて挙動を変えられるようになっている。actionpack/lib/action_controller/metal配下のmoduleでよくやっている。