命名空间内外的资源

时间:2015-09-25 08:01:07

标签: ruby-on-rails

我有以下 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命名空间中。

3 个答案:

答案 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%确定这是否可以在命名空间内工作。如果没有,您可以将其更改为范围,并将模块显式添加到其他资源。