我有以下 routes.rb :
resources :users
namespace :vmt do
resources :dashboards do
resources :users
resources :evaluation_units
resources :orga_units
end
end
我想在整体上下文中设置用户,并嵌套在命名空间内的单个仪表板上下文中。 users-Controller 不在命名空间中。因此,当我在浏览器中打开路径 / vmt / dashboards / 1 / users 时,我收到以下路由错误
uninitialized constant Vmt::UsersController
那么如何在此资源中指定
namespace :vmt do
resources :dashboards do
resources :users
控制器不在命名空间中?我尝试使用
设置控制器resources :users, controller: 'user'
但它仍在vmt命名空间中。
答案 0 :(得分:2)
使用作用域会将rails指向正确的url,但似乎没有提供相同的有用的路由url帮助器。但是,我们可以使用/
指向“顶层”控制器。
假设您有两条路线要显示给用户:
/users
和/admin/users
resources: users
namespace :admin do
resources :users, controller: '/users' # 'users' alone would look for a '/admin/users_controller'
end
有了这个,我们可以继续使用网址帮助器admin_users_path
(注意:不是Rails专家,可能有一种方法可以为合并范围或其他解决方案创建url帮助器。上面在rails 5.2上进行了测试)
答案 1 :(得分:1)
我的原始答案最终没有用,一旦进入路由中的命名空间范围,就无法退出。
重用逻辑的最简单方法是创建一个Vmt :: UsersController,如下所示:
class Vmt::UsersController < ::UsersController
end
答案 2 :(得分:0)
您可以使用module
键指定其他模块。
例如:
resources :users, module: nil
编辑:我不能100%确定这是否可以在命名空间内工作。如果没有,您可以将其更改为范围,并将模块显式添加到其他资源。