APP/sites/my_engine/ にマウント可能だが分離されていない Rails エンジンを持つアプリケーションを構築しています。このセットアップでの典型的なリクエストについての私の理解は次のようになります。
- リクエストは、メイン アプリのミドルウェア スタックを通過します。
- リクエストはメイン アプリのルーターにヒットし、マウントされたパスと一致します。マウントされたパーツを env["SCRIPT_NAME"] に配置し、エンジンを介してリクエストを送信します。
- リクエストは、エンジンのミドルウェア スタックを通過します。
- リクエストはエンジンのルーターにヒットし、ルートの残りの部分と一致します。
ルートがエンジンのルートで一致し、pages#show アクションにディスパッチするとします。コントローラーは次の優先度で呼び出されます。
- メインアプリに show アクションを持つ PagesController が存在する場合、これが最初に呼び出されます。
- エンジンに show アクションを持つ PagesController が存在する場合、最初のコントローラが存在しなかった場合にのみ、この 2 番目のコントローラが呼び出されます。
MyEngine::Engine.paths['app/controllers'] を見ると、デフォルトの ["app/controllers"] です。このコンテキストではエンジンです。では、なぜ最初にアプリのコントローラーを見つけるのでしょうか?
コントローラのパスのこの優先順位はどこで制御されますか?