我正在将应用程序从Rails 2迁移到Rails 3 我们有多个具有不同命名空间的命名空间控制器。 由于它们不是RESTfull,我不想使用资源路由,而是希望有一个旧的Rails 2,如 match':controller /:action',它们可以获取命名空间的控制器。
在我的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
/ config / companies / index 的请求仍然失败
ActionController::RoutingError (No route matches [GET] "/config/companies/index"):
我做错了什么?是否有另一种方法可以获得带动态段的命名空间路由?当我尝试将 namespace 和 match 与动态段一起使用时,会抛出错误。
:controller segment is not allowed within a namespace block
答案 0 :(得分:0)
好的,我发现了问题 Config是Rails中的保留常量,它指向RbConfig。我的匹配条件实际上有效,但试图调用RbConfig :: CompaniesController当然不存在。
当我尝试添加
时match '/:controller(/:action(/:id(.:format)))', :controller => /config\/[^\/]+/
错误是
ActionController::RoutingError (uninitialized constant RbConfig::CompaniesController)
解决方案:重命名app / controllers / config - > app / controllers / configuration(和views文件夹)并添加重定向到路由以处理旧链接。
match '/config/*path' => redirect("/configuration/%{path}")