没有资源的Rails 3中的命名空间控制器路由

时间:2013-01-03 19:27:22

标签: ruby-on-rails-3 rails-routing

我正在将应用程序从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

1 个答案:

答案 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}")