17
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails resourcesメソッドとresourceメソッド

Last updated at Posted at 2019-08-11

#はじめに
今回はRaiilsでRESTfulなルート設計を定義するメソッド

  • resourcesメソッド
  • resourceメソッド

についてまとめます。

RailsのルーティングとRESTfulについてはこちらにもまとめていますので、よかったら見てください。
Rails ルーティングの基礎とRESTful
#resourcesメソッド
RESTfulなルート設計を定義するメソッドです。
「config/routes.rb」で呼び出します。

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メソッドは単一のリソースに対応したルートを定義します。
routes.rb
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メソッドについてまとめましたが、
他にもルートパラメータに制約をかけたり、フォーマットに対応しないようにしたりなど
色々と定義できるようです。
その辺りも今後、調べてまとめてみたいと思います。

17
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?