はじめに
今回はRaiilsでRESTfulなルート設計を定義するメソッド
- resourcesメソッド
- resourceメソッド
についてまとめます。
RailsのルーティングとRESTfulについてはこちらにもまとめていますので、よかったら見てください。
Rails ルーティングの基礎とRESTful
resourcesメソッド
RESTfulなルート設計を定義するメソッドです。
「config/routes.rb」で呼び出します。
Rails.application.routes.draw do
  resources :users
end
ターミナルで「rake routes」を実行し、ルーティングを表示すると次のようになります。
※見やすいように多少整形しています
   Prefix Verb   URI Pattern               Controller#Action
    users GET    /users(.:format)          users#index
          POST   /users(.:format)          users#create
 new_user GET    /users/new(.:format)      users#new
edit_user GET    /users/:id/edit(.:format) users#edit
     user GET    /users/:id(.:format)      users#show
          PATCH  /users/:id(.:format)      users#update
          PUT    /users/:id(.:format)      users#update
          DELETE /users/:id(.:format)      users#destroy
「resources :users」の一行だけで、次のルートが定義されていることがわかります。
| URL | アクション | HTTPメソッド | 動作 | 
|---|---|---|---|
| /users(.:format) | index | GET | ユーザ一覧画面を表示 | 
| /users(.:format) | create | POST | ユーザの登録処理 | 
| /users/new(.:format) | new | GET | ユーザの登録画面を表示 | 
| /users/:id/edit(.:format) | edit | GET | ユーザの編集画面を表示 | 
| /users/:id(.:format) | show | GET | ユーザの詳細画面を表示 | 
| /users/:id(.:format) | update | PATCH | ユーザの更新処理 | 
| /users/:id(.:format) | update | PUT | ユーザの更新処理 | 
| /users/:id(.:format) | destroy | DELETE | ユーザの削除処理 | 
| また、resourcesメソッドは名前付きルートも自動で生成します。 | 
| 名前付きパス(_path) | 名前付きパス(_path) | 対応するパス | 
|---|---|---|
| users_path | users_url | /users | 
| user_path(id) | user_url(id) | /users/:id | 
| new_user_path | new_user_url | /users/new | 
| edit_user_path(id) | edit_user_url(id) | /users/:id/edit | 
resourceメソッド
resourcesメソッドは複数のリソースに対応したルートを定義したのに対し、
resourceメソッドは単一のリソースに対応したルートを定義します。
Rails.application.routes.draw do
  resource :user
end
ターミナルで「rake routes」を実行し、ルーティングを表示すると次のようになります。
※見やすいように多少整形しています
Prefix     Verb   URI Pattern          Controller#Action
new_users  GET    /user/new(.:format)  users#new
edit_users GET    /user/edit(.:format) users#edit
users      GET    /user(.:format)      users#show
           PATCH  /user(.:format)      users#update
           PUT    /user(.:format)      users#update
           DELETE /user(.:format)      users#destroy
           POST   /user(.:format)      users#create
| URL | アクション | HTTPメソッド | 動作 | 
|---|---|---|---|
| /user/new(.:format) | new | GET | ユーザの登録画面を表示 | 
| /user/edit(.:format) | edit | GET | ユーザの編集画面を表示 | 
| /user(.:format) | show | GET | ユーザの詳細画面を表示 | 
| /user(.:format) | update | PATCH | ユーザの更新処理 | 
| /user(.:format) | update | PUT | ユーザの更新処理 | 
| /user(.:format) | destroy | DELETE | ユーザの削除処理 | 
| /user(.:format) | create | POST | ユーザの登録処理 | 
resourcesメソッドとは異なる部分があることが分かります。
- アクションのindexに対応するルートがない
- idパラメータを要求していない
また、 resourceメソッドでもコントローラは複数形になっています。
resourcesメソッドと同様に、resourceメソッドも名前付きルートを自動で生成します。
| 名前付きパス(_path) | 名前付きパス(_path) | 対応するパス | 
|---|---|---|
| user_path | user_url | /users | 
| new_user_path | new_user_url | /users/new | 
| edit_user_path | edit_user_url | /users/edit | 
おわりに
resourcesメソッドとresourceメソッドについてまとめましたが、
他にもルートパラメータに制約をかけたり、フォーマットに対応しないようにしたりなど
色々と定義できるようです。
その辺りも今後、調べてまとめてみたいと思います。