【发布时间】:2016-10-07 23:30:33
【问题描述】:
我正在尝试弄清楚如何在 Rails 5 中嵌套路由(以便将相关的控制器放在一起。
我的控制器文件树设置为:
app/controllers/users
在该文件夹中,我有以下控制器:
identities_controller.rb
app_roles_controller.rb
每个控制器都保存为:
class Users::IdentitiesController < ApplicationController
class Users::AppRolesController < ApplicationController
我的路线文件有:
resources :app_roles,
:controllers => {
:app_roles => 'users/app_roles'
}
devise_for :users,
:controllers => {
:sessions => 'users/sessions',
:registrations => "users/registrations",
:omniauth_callbacks => 'users/omniauth_callbacks'
}
resources :identities,
:controllers => {
:identities => 'users/identities'
}
resources :users
在我的视图文件夹中,所有文件都是顶级文件。我不清楚是否需要以与我的控制器相同的方式对它们进行分组。
当我保存所有这些并尝试导航到 http://localhost:3000/app_roles#index 时,我希望转到我的 app/views/app_roles/index。
相反,我收到一条错误消息:
app_roles
uninitialized constant AppRolesController
当我 rake 路线时,我得到:
rake routes | grep app_roles
app_roles GET /app_roles(.:format) app_roles#index {:controllers=>{:app_roles=>"users/app_roles"}}
POST /app_roles(.:format) app_roles#create {:controllers=>{:app_roles=>"users/app_roles"}}
new_app_role GET /app_roles/new(.:format) app_roles#new {:controllers=>{:app_roles=>"users/app_roles"}}
edit_app_role GET /app_roles/:id/edit(.:format) app_roles#edit {:controllers=>{:app_roles=>"users/app_roles"}}
app_role GET /app_roles/:id(.:format) app_roles#show {:controllers=>{:app_roles=>"users/app_roles"}}
PATCH /app_roles/:id(.:format) app_roles#update {:controllers=>{:app_roles=>"users/app_roles"}}
PUT /app_roles/:id(.:format) app_roles#update {:controllers=>{:app_roles=>"users/app_roles"}}
DELETE /app_roles/:id(.:format) app_roles#destroy {:controllers=>{:app_roles=>"users/app_roles"}}
对我来说,我认为这些路由表明 app_roles#index 应该通过 app/controllers/users/app_roles_controller.rb 中的控制器进入 app/views/app_roles/index.html.erb
我对身份资源有同样的问题。
猜测 我尝试将 app/views/app_roles 文件夹移动到嵌套在用户文件夹下(即 app/views/users),但是当我尝试转到 http://localhost:3000/app_roles#index 以检查它是否有效时,我得到了同样的错误。
我也尝试将路由文件修改为:
resources :app_roles,
:resources => {
:app_roles => 'users/app_roles'
}
我的意思是,我将对 :controllers 的引用更改为 :resources。它不起作用 - 我得到了同样的错误。
谁能看出我做错了什么?
【问题讨论】:
-
也许可以尝试将您的文件放在命名空间文件夹中,即
app/controllers/users/<my_controller>.rb。 -
他们在:app/controllers/users
-
你也有
app/controllers/user_controller吗?它可以只包含class UsersController < ApplicationController; end -
我愿意 - 我的 UsersController 是顶级的(不嵌套在 app/controllers/users 文件夹中)
标签: ruby-on-rails ruby routes nested-routes