目的
現在携わっているRails のプロジェクトのroutes.rbでnamespaceが使用されていたので、その意味、また使用方法が似ているmoduleとscopeとの違いについて備忘録、知識の定着のためにまとめる。
1.namespace
2.scope
3.module
1.namespace
namespaceの中にルーティング設定を記述すると
・urlがnamespaceで指定したモジュール名下のpathになる
・controllerファイルがnamespaceで指定したモジュール名のディレクトリ下に配置される
・controllerのクラス名がnamespaceで指定したモジュール名::コントローラ名
になる
例)
routes.rbに記述
Rails.application.routes.draw do
namespace :admin do
resources :users
end
end
$rails routes
admin_users GET /admin/users(.:format) admin/users#index
POST /admin/users(.:format) admin/users#create
new_admin_user GET /admin/users/new(.:format) admin/users#new
edit_admin_user GET /admin/users/:id/edit(.:format) admin/users#edit
admin_user GET /admin/users/:id(.:format) admin/users#show
PATCH /admin/users/:id(.:format) admin/users#update
PUT /admin/users/:id(.:format) admin/users#update
DELETE /admin/users/:id(.:format) admin/users#destroy
controllerファイル配置場所
app/controllers/admin/users_controller.rb
controllerのクラス名
class Admin::UsersController < ApplicationController
end
2.scope
scopeの中にルーティング設定を記述すると
・urlがnamespaceで指定したモジュール名下のpathになる
例)
routesに記述
Rails.application.routes.draw do
scope :admin do
resources :users
end
end
$ rails routes
users GET /admin/users(.:format) users#index
POST /admin/users(.:format) users#create
new_user GET /admin/users/new(.:format) users#new
edit_user GET /admin/users/:id/edit(.:format) users#edit
user GET /admin/users/:id(.:format) users#show
PATCH /admin/users/:id(.:format) users#update
PUT /admin/users/:id(.:format) users#update
DELETE /admin/users/:id(.:format) users#destroy
controllerファイル配置場所
app/controllers/users_controller.rb
controllerのクラス名
class UsersController < ApplicationController
end
3.module
scopeの中にルーティング設定を記述すると
・controllerファイルがmoduleで指定したモジュール名のディレクトリ下に配置される
・controllerのクラス名がmoduleで指定したモジュール名::コントローラ名
になる
例)
routes.rbに記述
Rails.application.routes.draw do
scope module: :admin do
resources :users
end
end
$rails routes
users GET /users(.:format) admin/users#index
POST /users(.:format) admin/users#create
new_user GET /users/new(.:format) admin/users#new
edit_user GET /users/:id/edit(.:format) admin/users#edit
user GET /users/:id(.:format) admin/users#show
PATCH /users/:id(.:format) admin/users#update
PUT /users/:id(.:format) admin/users#update
DELETE /users/:id(.:format) admin/users#destroy
controllerファイル配置場所
app/controllers/admin/users_controller.rb
controllerのクラス名
class Admin::UsersController < ApplicationController
end
まとめ
namespace | scope | module | |
---|---|---|---|
urlが指定したモジュール名下のpathになる | ○ | ○ | × |
controllerファイルが指定したモジュール名のディレクトリ下に配置される | ○ | × | ○ |
controllerのクラス名が指定したモジュール名::コントローラ名 になる |
○ | × | ○ |