2013-01-03 1 views
0

레일 2에서 레일 3로 애플리케이션을 마이그레이션하고 있습니다.
여러 네임 스페이스의 컨트롤러가 여러 개 있습니다. RESTfull이 아니기 때문에 리소스 라우팅을 사용하지 않으려 고 대신 오래된 레일 2를 과 일치 시키려합니다. ': controller/: action'은 네임 스페이스 컨트롤러를 선택합니다. 내 routes.rb에서이름없는 컨트롤러가 리소스없이 레일즈 3에서 라우팅됩니다.

나는

# Install the default route as the lowest priority. 
match ':controller(/:action(/:id(.:format)))' 
match ':controller(/:action(/:id(.:format)))', :controller => /[^\/]+\/[^\/]+/ 

레이크 노선

/:controller(/:action(/:id(.:format)))   :controller#:action 
/:controller(/:action(/:id(.:format)))   (?-mix:[^\/]+\/[^\/]+)#:action 

을 보고서가 아직에 요청 /설정/인덱스

ActionController::RoutingError (No route matches [GET] "/config/companies/index"): 

실패/회사 내가 도대체 ​​뭘 잘못하고있는 겁니까? 네임 스페이스가 적용된 경로를 동적 세그먼트로 가져 오는 또 다른 방법이 있습니까? 네임 스페이스와 일치 시키려고하면 동적 세그먼트가 함께 오류가 발생합니다.

:controller segment is not allowed within a namespace block 

답변

0

확인 문제가 발견되었습니다.
Config는 Rails의 예약 상수이며 RbConfig를 가리 킵니다. 내 일치 조건은 실제로 작동하지만 물론 존재하지 않는 RbConfig :: CompaniesController를 호출하려고합니다. 내가 추가하려고

match '/:controller(/:action(/:id(.:format)))', :controller => /config\/[^\/]+/ 

오류였다

ActionController::RoutingError (uninitialized constant RbConfig::CompaniesController) 

해결 방법 : 응용 프로그램/컨트롤러/설정의 이름을 변경 -> 응용 프로그램/컨트롤러/구성 (및 전망 폴더) 및 추가 레거시 링크를 처리하기 위해 라우팅으로 리디렉션합니다.

match '/config/*path' => redirect("/configuration/%{path}")