ホストをチェックするために制約を使用しているルートと、本質的に同じであるがホスト制限のないルートがあります (これらは実際には名前空間ですが、物事を簡単にするために、この例で行います):
match "/(:page_key)" => "namespace_one/pages#show", :constraints => proc {|env| env['SERVER_NAME'] == 'test.mysite.local' }
match "/(:page_key)" => "namespace_two/pages#show"
get "/page_key"
これらは、ブラウザ経由でアクセスするときや、ホストを定義して実行するときの統合テストなどで、期待どおりに機能します。
ただし、これらのルートが機能することを確認するテストを作成したいのですが、これまでのところ、次のテスト (現在ActionController::IntegrationTest
ホストを設定できるようになっている) が制約のないものと一致しているため、あまり運がありません。
assert_routing '', { :controller => 'namespace_one/pages', :action => 'show' }
=> The recognized options <{"action"=>"show", "controller"=>"frontend/pages"}>
did not match <{"action"=>"show", "controller"=>"namespace_two/pages"}>,
difference: <{"controller"=>"namespace_one/pages"}>
Constraint proc で env をダンプしようとすると、得られるのは--- :controller
.
assert_routing を取り除き、get :show
呼び出しとダンプを実行@controller
すると、正しいコントローラーに解決されます (これらのルートはすべて HTTP 要求を介して正常に機能するため、予想どおり)。