【Rails】ルーティングresource(単数形)

Ruby on Railsアイキャッチ画像

Railsのルーティングはresourcesで定義できますが、それ以外の方法として、resource(単数形)を使った方法もあるのでそれらについてまとめました。

resourcesでルーティングを作成する場合

Rails.application.routes.draw do
  resources :publishers
end

この場合のルーティングは以下になる。

                                  Prefix Verb   URI Pattern                                                                                       Controller#Action
                              publishers GET    /publishers(.:format)                                                                             publishers#index
                                         POST   /publishers(.:format)                                                                             publishers#create
                           new_publisher GET    /publishers/new(.:format)                                                                         publishers#new
                          edit_publisher GET    /publishers/:id/edit(.:format)                                                                    publishers#edit
                               publisher GET    /publishers/:id(.:format)                                                                         publishers#show
                                         PATCH  /publishers/:id(.:format)                                                                         publishers#update
                                         PUT    /publishers/:id(.:format)                                                                         publishers#update
                                         DELETE /publishers/:id(.:format)                                                                         publishers#destroy

このresourcesは、アプリケーション上に複数存在するリソースを扱う場合に用いるものである。

これに対し、

ログインユーザが参照するプロフィールのような、一人のユーザから見てアプリケーション上1つしか存在しないリソースに対しては、複数形でなく単数形でresourceと定義することができる。

Rails.application.routes.draw do
  resource :profile
end

この場合のルーティングは以下になる

                                  Prefix Verb   URI Pattern                                                                                       Controller#Action
                             new_profile GET    /profile/new(.:format)                                                                            profiles#new
                            edit_profile GET    /profile/edit(.:format)                                                                           profiles#edit
                                 profile GET    /profile(.:format)                                                                                profiles#show
                                         PATCH  /profile(.:format)                                                                                profiles#update
                                         PUT    /profile(.:format)                                                                                profiles#update
                                         DELETE /profile(.:format)                                                                                profiles#destroy
                                         POST   /profile(.:format)                                                                                profiles#create

以下2点が異なります。

  • indexが無くなる
  • idが無くなる。プロフィールは必ずログインのユーザに紐付くため不要

使い分けできるといいですね!!

コメント