我正在尝试在Rails 5中创建一个应用程序。
为了保持文件结构整洁,我正在尝试在我的控制器目录中创建文件夹,我可以使用它来分组类似的资源。
例如,我有:
app/controllers/users/users_controller.rb
然后,我可以将会话控制器嵌套在控制器/用户控制器中,以便与用户相关的所有资源都分组在用户文件夹下。
我因为路线文件怎么办而陷入困境。
当我耙路线时,我可以看到:
users#index {:controllers=>{:users=>"users/users"}}
POST /users(.:format) users#create {:controllers=>{:users=>"users/users"}}
new_user GET /users/new(.:format) users#new {:controllers=>{:users=>"users/users"}}
edit_user GET /users/:id/edit(.:format) users#edit {:controllers=>{:users=>"users/users"}}
user GET /users/:id(.:format) users#show {:controllers=>{:users=>"users/users"}}
PATCH /users/:id(.:format) users#update {:controllers=>{:users=>"users/users"}}
PUT /users/:id(.:format) users#update {:controllers=>{:users=>"users/users"}}
DELETE /users/:id(.:format) users#destroy {:controllers=>{:users=>"users/users"}}
在我的路线文件中,我尝试了一些事情(如下所示) - 它们都不起作用:
Rails.application.routes.draw do
devise_for :users,
:controllers => {
:sessions => 'users/sessions',
:registrations => "users/registrations",
:omniauth_callbacks => 'users/omniauth_callbacks'
}
resources :identities,
:controllers => {
:identities => 'users/identities'
}
resources :users do
scope module: :users do
resources :users
end
end
root 'home#index'
end
我也尝试过:
resources :users,
:controllers => {
:users => 'users/users'
}
每一次,我都会收到错误消息:
ActionController::RoutingError at /users
uninitialized constant UsersController
我不知道我需要做些什么才能让它发挥作用。我已经更改了嵌套在controllers / users文件夹中的每个控制器,前缀为:
Users::
任何人都可以看到如何设置它,以便我可以整洁地保存我的文件吗?
注意:我没有在models文件夹中创建相同的文件目录结构。我想 - 但我担心我无法为控制器弄清楚这一点。谁能看到我做错了什么?
答案 0 :(得分:3)
我建议您将实际的users_controller
放在基本控制器目录中,并且只将嵌套控制器放在users
目录中(即遵循与嵌套相同的结构)。
另一种方法是将users_controller
命名为rails预期的,即在Users
模块中:
module Users
class UsersController < ApplicationController
...
然后引用它:Users::UsersController
我总觉得名字中的重复有点麻烦,而且更喜欢顶层控制器只是在基本目录中。
答案 1 :(得分:2)
我也非常喜欢这个视频中解释的方法:
基本上他为每个模块创建BaseController
,从ApplicationController
继承,然后相关控制器直接从相应的BaseController
继承。