2013-01-03 60 views
0

我正在將應用程序從Rails 2遷移到Rails 3.
我們有多個命名空間不同的命名空間的控制器。 因爲他們不是RESTfull我不想使用資源路由,而是我想有一箇舊的Rails 2,如匹配':controller /:action',它拿起命名空間控制器。命名空間在沒有資源的Rails 3中的控制器路由

在我的routes.rb我有

# 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}") 
相關問題