2012-06-13 10 views
5

マウント可能なRails 3エンジンを作成しています。エンジンのルートとホストアプリケーションを組み合わせています。しかし、ホストアプリケーションのルートは私のエンジンのルートよりも優先されます。ホストアプリケーションのルート(特にルートルート)をオーバーライドする方法はありますか?マウント可能なエンジンからホストアプリケーションのルートルートを上書きする

ここmy_enging/config/routes.rbの私のエンジンの路線です:

MyEngine::Engine.routes.draw do 
root :to => "home#index" 
end 

# Mount engine routes to host application 
Rails.application.routes.draw do 
    mount MyEngine::Engine, :at => "/" 
end 

そしてここでは、ホストのルートがトップに座って、rake routesの結果です:

root/welcome#index 
my_engine/MyEngine::Engine 
root/home#index 

Spreeはこれを行い1つの逸品ですが、私は彼らがどのように実装されているかを見つけることができませんでした。

答えて

0

人は逆のことをする可能性が高いので、エンジンルートを上書きする機能が期待されるため、これが必要な理由を理解できません。実際には、エンジンがアプリケーションルートを無効にするようにエンジンを強制する方法はありませんが、

スプレーはどういうわけかeval_block経由で経路を動的に追加しています。

root to:だけでなく、アプリケーション内の望ましくないルートもすべてスキップして、エンジンルートが表示されます。両者を守らないでください。私はあなたのアプリケーションで指定されたルートを表示していませんが、私は実験を実行して、すべてが動作します!

W12::Engine.routes.draw do 
    root to: 'details#index' 
end 

MyCarsApplication.routes.draw do 
    mount Common::Engine => "/" 
end 

そして唯一つのルートがあります:

root/details#index 

This post about creating not isolated enginesも役立つかもしれません。

正確な回答が見つかった場合は、投稿してください。

関連する問題