テクノロジー

2017年12月18日

Railsのルーティングをグルーピングする方法

Railsのルーティングをグルーピングする方法

今回は、namespaceなどのオプションを使ったルーティングの生成を見ていきます。

namespaceとは

Ruby on Railsのルーティングを作成するときnamespaceを使うと指定したルーティングの配下にルーティングを設定することができます。

早速実例を見ていきましょう。

Rails.application.routes.draw do
  namespace :hoge do
    resources :blogs
  end
end

このようなルーティングを設定して、rake routesを実行してみると

        Prefix Verb   URI Pattern                    Controller#Action
    hoge_blogs GET    /hoge/blogs(.:format)          hoge/blogs#index
               POST   /hoge/blogs(.:format)          hoge/blogs#create
 new_hoge_blog GET    /hoge/blogs/new(.:format)      hoge/blogs#new
edit_hoge_blog GET    /hoge/blogs/:id/edit(.:format) hoge/blogs#edit
     hoge_blog GET    /hoge/blogs/:id(.:format)      hoge/blogs#show
               PATCH  /hoge/blogs/:id(.:format)      hoge/blogs#update
               PUT    /hoge/blogs/:id(.:format)      hoge/blogs#update
               DELETE /hoge/blogs/:id(.:format)      hoge/blogs#destroy

上記のようなルーティングが作成されます。
作成されたルーティングを見るとresources :blogsだけでルーティングを設定した時とは違い、ルーティングにhoge/hogeが付いています。
このようにnamespace :指定したいルーティング do 〜 endと記載すると指定したいルーティングがnamespaceの中で記載したルーティングに付与されるようになります。

ルーティングをグルーピングしたい際などにnamespaceを用いることでルーティングをいい感じに設定することができます。

namespace使用シーン

namespaceの利用方法として多いのは管理画面のルーティングを作成する際によく用いられることがあります。

Rails.application.routes.draw do
  namespace :admin do
    resources :blogs
    resources :users
    ...
  end
end

上記のようなadminのnamespaceを切って、namespaceの中に開発しているWebアプリケーションのリソースのルーティングをどんどん入れていって管理画面でDBのCRUD処理をできるようにするルーティングを作成するといったケースは多いと思います。

namespace以外でルーティングを指定

ルーティングをグルーピングする機能としてnamespace以外にもscopescope moduleがあります。

それぞれの作成されるルーティングを見てみましょう。

scope

Rails.application.routes.draw do
  scope :hoge do
    resources :blogs
  end
end
   Prefix Verb   URI Pattern                    Controller#Action
    blogs GET    /hoge/blogs(.:format)          blogs#index
          POST   /hoge/blogs(.:format)          blogs#create
 new_blog GET    /hoge/blogs/new(.:format)      blogs#new
edit_blog GET    /hoge/blogs/:id/edit(.:format) blogs#edit
     blog GET    /hoge/blogs/:id(.:format)      blogs#show
          PATCH  /hoge/blogs/:id(.:format)      blogs#update
          PUT    /hoge/blogs/:id(.:format)      blogs#update
          DELETE /hoge/blogs/:id(.:format)      blogs#destroy

scopeでルーティングを設定するとURI Patternだけに/hogeが付与されています。

module

Rails.application.routes.draw do
  scope module: :hoge do
    resources :blogs
  end
end
   Prefix Verb   URI Pattern               Controller#Action
    blogs GET    /blogs(.:format)          hoge/blogs#index
          POST   /blogs(.:format)          hoge/blogs#create
 new_blog GET    /blogs/new(.:format)      hoge/blogs#new
edit_blog GET    /blogs/:id/edit(.:format) hoge/blogs#edit
     blog GET    /blogs/:id(.:format)      hoge/blogs#show
          PATCH  /blogs/:id(.:format)      hoge/blogs#update
          PUT    /blogs/:id(.:format)      hoge/blogs#update
          DELETE /blogs/:id(.:format)      hoge/blogs#destroy

scope moduleでルーティングを指定するとController#Actionのみhogeが付与されます。

namespaceではPrefixURI PatternController#Action
scopeではURI Pattern のみ
scope moduleController#Actionのみ

このように指定の仕方で設定されるルーティングの内容が変わってくるので必要な指定の仕方を意識していけば狙ったルーティングを作成できるようになります。

今まで3回に渡りRailsのルーティング基礎resourcesmemberとcollectionnamespaceを学んできました。
この内容を覚えておけばRuby on Railsにおける基本的なルーティングは作成できるようになります。

ただRuby on Railsのルーティングはもっと柔軟に色々な設定ができるオプションなどがあるので、適宜調べて最適な記述方法を身につけていけば、素敵なルーティングを設定できるようになります。ぜひ色々調べて見てください。

DIVE INTO CODEのことをもっと知ってみませんか?