Rails

【Rails】resourcesメソッドとresourceメソッドの違いについて簡単に解説!

Rails

 

今回は、Railsで定義されている7つのアクションのルーティングを自動生成してくれる、「resourcesメソッド」と「resourceメソッド」の違いについて解説したいと思います。

複数形(resources)と単数形(resource)ではどのような違いがあるのでしょうか?

resourcesメソッドの概要

まずは簡単に「resourcesメソッド」について解説します。

「resourcesメソッド」は、7つのアクション(index、show、new、create、edit、update、destroy)のルーティングを一括生成してくれるメソッドです。

例えば、以下のような記述を「routes.rb」にしたとします。

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

 

続いて「rails routes」を実行してみましょう。見てみると「rails routes」の結果は以下のようになるはずです。

ルーティング
usersに関して、7つのアクションのルーティングが生成されているね。

 

このように「resourcesメソッド」を使うことで、簡単にルーティングを生成することができるようになります。

resourcesメソッドとresourceメソッドの違い

それでは、本題である「resourcesメソッド」と「resourceメソッド」の違いについて見ていきましょう。

結論から言うと、「resourcesメソッド」は7つのアクションのルーティングがid付きで生成されますが、「resourceメソッド」はルーティングがidなしで生成されます。

加えて、「resourceメソッド」はindexアクションのルーティングが生成されません。

↓ rails routesの結果例

resourcesメソッドとresourceメソッド

 

より詳しく見ていきましょう。以下のように「routes.rb」を編集しました。

↓ routes.rb

Rails.application.routes.draw do
  resources :users
  resource :user
end

 

このルーティングを「rails routes」コマンドで確認します。すると、以下のような結果が表示されると思います。

↓ rails routes実行結果

resourcesメソッドとresourceメソッド

resourceで定義したuserには、idとindexアクションが付与されていないことが分かりますね。

resourcesとresourceの使い分け

「resourcesメソッド」と「resourceメソッド」については理解することができました。では実際にどのように使い分ければよいのでしょうか?

「resourceメソッド」にはidが付与されていません。ということはつまり、リソースを絞り込めない(絞り込まない)状況で使用します。

その一方で「resourcesメソッド」はidが付与されています。そのため、複数あるリソースの中からidを用いて特定のリソースを絞り込むことができます。

まとめると、複数存在するリソース(商品やユーザーなど)では「resources」を使用し、1つしか存在しないリソースには「resouece」を使用します。

 

 

今回は「resourcesメソッド」と「resourceメソッド」の違いについて解説しました。これらを使い分け、RESTfulな実装を心がけていきましょう。