0
0

[Rails] routes.rbのnamespace, module, scopeの違い

Posted at

目的

現在携わっている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のクラス名が指定したモジュール名::コントローラ名 になる ×

参考にさせていただいた記事

resourcesについてはこちらをご参照ください

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0