5

Railsエンジンを統合しようとしているRailsアプリがあります。

ホスト アプリには、すべてのルートをキャッチするものがあります。

  # magic urls
  match '/' => 'admin/rendering#show'
  match '*path/edit' => 'admin/rendering#show', :defaults => { :editing => true }
  match '*path' => 'admin/rendering#show'

アプリケーションがすべてのルートをキャッチした後、エンジンのルートが読み込まれるようです。

/sitemap.xml(.:format)                                            {:format=>"xml", :controller=>"admin/sitemaps", :action=>"show"}
                              /(.:format)                                                       {:controller=>"admin/rendering", :action=>"show"}
                              /*path/edit(.:format)                                             {:controller=>"admin/rendering", :action=>"show"}
                              /*path                                                            {:controller=>"admin/rendering", :action=>"show"}
           engine_envs GET    /engine/envs/:id(.:format)                                       {:controller=>"engine/envs", :action=>"show"}
                       PUT    /engine/envs/:id(.:format)                                       {:controller=>"engine/envs", :action=>"update"}
                jammit        /assets/:package.:extension(.:format)                             {:extension=>/.+/, :controller=>"jammit", :action=>"package"}

これまでのところ、すべてがルートにヒットし、/engine/envsすべてのルートをキャッチするアプリケーションによってキャッチされています。しかし、エンジンの後にジャムルートがロードされていることがわかり、それらが引っかかっているとは思えません。アプリのルートをオーバーライドする方法はありますか?

4

2 に答える 2

1

エンジン ルートをメソッドに貼り付けて、それをホスト アプリで呼び出すことができます。

# engine routes.rb
module ActionDispatch::Routing
  class Mapper
    def engine_routes
      engine_envs GET    /engine/envs/:id(.:format)
      # ...
    end 
# ...

次に、ホストアプリでキャッチオールルートの前にメソッドを追加します

# host app routes.rb
MyTestApp::Application.routes.draw do
  # ... 

  engine_routes

  match '/' => 'admin/rendering#show'
  match '*path/edit' => 'admin/rendering#show', :defaults => { :editing => true }
  match '*path' => 'admin/rendering#show'
end
于 2011-08-19T15:21:30.820 に答える
0

ルートは、定義された順序で使用されます。最初に読み取られるルートは、ホスト アプリケーションのルートであり、次にエンジンのルートです。

一致するルートが見つかるとすぐに、ルートの検索が停止されます。

私の知る限り、「mag」を変更する以外に、この機能をオーバーライドする方法はありません (これについては間違っているかもしれません)。

更新: つまり、「レーキ ルート」に表示される順序は、処理される順序です。一致するルートが見つかるとすぐに、そこに行きます。

于 2011-07-06T12:28:27.747 に答える