5

레일즈 엔진을 통합하려고하는 레일즈 애플리케이션이 있습니다.엔진에서 레일스 앱 경로를 재정의하는 방법은 무엇입니까?

호스트 응용 프로그램은 몇 가지 캐치 모든 경로가 있습니다

# 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 루트는 응용 프로그램에 의해 발각되는 모든 경로를 잡을 수있어. 그러나 나는 jammit 길은 엔진 후로드됩니다 그리고 나는 그 사람들이 잡히고 있다고 생각하지 않습니다. 앱 경로를 재정의하는 방법은 없나요?

답변

1

당신은 방법에있는 당신의 엔진 노선을 고수하고 호스트 앱에서 호출 할 수 있습니다.

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

호스트 앱에서 catch-all rou 앞에 메소드를 추가하십시오. 테

# 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 
0

경로는 정의 된 순서대로 사용됩니다. 읽을 첫 번째 경로는 호스트 응용 프로그램 중 하나이며 엔진의 경로입니다.

일치하는 경로가 발견되자 마자 경로 검색이 중지됩니다.

지금까지 내가 (내가 이것에 대해 잘못 될 수 있음)하여 변경하는 것 이외의이 기능을 오버라이드 (override) 할 수있는 방법이 없습니다 알고 "잡지

UPDATE를 : 그래서 순서 당신이 그들을 볼 것을 의미한다" 레이크 노선들은 ". 즉시 일치하는 경로가 발견 될 때, 거기에 당신이 가서는 처리되는 순서입니다.

관련 문제