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



我正在将一个应用程序从Rails 2迁移到Rails 3。
我们有多个具有不同命名空间的命名空间控制器。因为它们不是RESTfull,我不想使用资源路由,相反,我想有一个旧的Rails 2像匹配':controller/:action',拿起命名空间的控制器。

在我的路线。我有

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

rake routes reports

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

请求/config/companies/index仍然失败

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

我做错了什么?是否有另一种方法来获得具有动态段的命名空间路由?当我尝试将命名空间匹配与动态段一起使用时,它会抛出错误。

:controller segment is not allowed within a namespace block

我找到问题了。
Config是Rails中的一个保留常量,它指向RbConfig。我的匹配条件实际上有效,但试图调用RbConfig:: companyescontroller,当然不存在。

当我试图添加

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

相关内容

  • 没有找到相关文章

最新更新