テクノロジー

2016年11月03日

Railsのルーティングを学ぼう③

Aws4 request&x amz signedheaders=host&x amz signature=582d5835ebea30c44300b2cc18a8f2d7a46473bd21e5151a510faa02bef5cd1a

Railsのルーティングを学ぶ(最終回)

ルーティング①ではRuby on Railsにおけるルーティングの基礎に触れ、resourcesで生成されるルーティングを学びました。

さらに ルーティング② ではresourcesで生成されるルーティング以外のルーティングを作るためのcollectionとmemberを学びました。

「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のことをもっと知ってみませんか?