今回は、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」の結果は以下のようになるはずです。

このように「resourcesメソッド」を使うことで、簡単にルーティングを生成することができるようになります。
resourcesメソッドとresourceメソッドの違い
それでは、本題である「resourcesメソッド」と「resourceメソッド」の違いについて見ていきましょう。
結論から言うと、「resourcesメソッド」は7つのアクションのルーティングがid付きで生成されますが、「resourceメソッド」はルーティングがidなしで生成されます。
加えて、「resourceメソッド」はindexアクションのルーティングが生成されません。
↓ rails routesの結果例

より詳しく見ていきましょう。以下のように「routes.rb」を編集しました。
↓ routes.rb
Rails.application.routes.draw do
resources :users
resource :user
end
このルーティングを「rails routes」コマンドで確認します。すると、以下のような結果が表示されると思います。
↓ rails routes実行結果

resourceで定義したuserには、idとindexアクションが付与されていないことが分かりますね。
resourcesとresourceの使い分け
「resourcesメソッド」と「resourceメソッド」については理解することができました。では実際にどのように使い分ければよいのでしょうか?
「resourceメソッド」にはidが付与されていません。ということはつまり、リソースを絞り込めない(絞り込まない)状況で使用します。
その一方で「resourcesメソッド」はidが付与されています。そのため、複数あるリソースの中からidを用いて特定のリソースを絞り込むことができます。
まとめると、複数存在するリソース(商品やユーザーなど)では「resources」を使用し、1つしか存在しないリソースには「resouece」を使用します。
今回は「resourcesメソッド」と「resourceメソッド」の違いについて解説しました。これらを使い分け、RESTfulな実装を心がけていきましょう。