↗️

【Rails】routes.rb の namespace, scope, module の違い

2024/09/07に公開

概要

ちょいちょい忘れるので、Rails のルーティングの namespace, scope, scope: :module の違いをまとめました。
https://railsguides.jp/routing.html

結論

パス(URL)に名前空間を追加するか コントローラに名前空間を追加するか
namespace 追加する 追加する
scope 追加する 追加しない
scope: :module 追加しない 追加する

namespace

routes.rb

 namespace :hoge do
    resources :users, only: %i[index]
  end
> rails routes | grep users
hoge_users GET    /hoge/users(.:format)    hoge/users#index

コントローラ

module Hoge
  class UsersController < ApplicationController 
    def index; end
  end
end

scope

routes.rb

 scope :hoge do
    resources :users, only: %i[index]
  end
> rails routes | grep users
users GET    /hoge/users(.:format)    users#index

コントローラ

class UsersController < ApplicationController
  def index; end
end

scope: :module

routes.rb

  scope module: :hoge do
    resources :users, only: %i[index]
  end
> rails routes | grep users
users GET    /users(.:format)    hoge/users#index

コントローラ

module Hoge
  class UsersController < ApplicationController
    def index; end
  end
end

Discussion