📌

namespaceブロックの内側でnamespaceの外側のコントローラにルーティングしたい

2021/06/03に公開

結論

/をつけて絶対パスで指定する。

namespace :admin do
  get :articles, to: 'articles#foo' # => Admin::ArticlesController#fooを使う
  get :users, to: '/users#foo' # => UsersController#fooを使う
end

namespaceで楽したい

namespaceブロックの中でルーティングを定義すると、namespaceとして指定したパスの配下では、そのパスと同名のモジュールに属するコントローラーを利用する用になる。管理画面を作るときに重宝する。

namespace :admin do
  # GET /admin/usersをAdmin::UsersController#fooにルーティングする
  get :users, to: 'users#foo'
end

抜け出したいこともある

管理者にしかアクセスできないユーザー側の画面が存在するような場合、namespaceはadminだがコントローラーはAdmin配下では無いようにしたい事がある。
つまり、/admin/usersUsersController#fooにルーティングしたい。

このような場合、toで指定するコントローラー名の先頭に/をつけると絶対パスによる指定ができる。

namespaceブロックの内部で異なるコントローラ名前空間を使いたい場合、「get '/foo', to: '/foo#index'」のような絶対コントローラパスを指定することもできます。

https://railsguides.jp/routing.html#コントローラの名前空間とルーティング

namespace :admin do
  # GET /admin/usersをUsersController#fooにルーティングする
  get :users, to: '/users#foo'
end

Discussion