はじめに
Ruby on Railsのルーティングには、resourcesとresourceの二つの非常に便利なメソッドがあります。これらはRESTfulなルーティングを自動的に生成し、それぞれのコントローラアクションへのパスを簡単に作成することができます。
resources
resourcesメソッドは、指定したリソースに対する標準的なRESTfulルーティングを自動的に生成します。
例えば、config/routes.rbに以下のように記述すると、
resources :users
UsersControllerのアクションに対応した7つのルーティング(index, show, new, edit, create, update, destroy)が自動的に生成されます。また、これらのルーティングに対応したパスヘルパーメソッドも自動的に提供されます。
resource
resourceメソッドは、resourcesと同様にルーティングを自動生成しますが、こちらは単数形リソースを表現します。そのため、indexとshowアクションのルーティングが生成されません。つまり、そのリソースは一つしか存在しないという前提でルーティングが生成されます。
例えば、ユーザープロフィールページが一つしかない場合、config/routes.rbに以下のように記述します。
resource :profile
すると、ProfilesControllerのnew, create, edit, update, destroyの5つのアクションに対応したルーティングが自動的に生成されます。
resourcesとresourceの違い
主な違いは二つあります。
・URL: resourcesは複数形のリソース名をURLに使用しますが、resourceは単数形のリソース名をURLに使用します。
・ID: resourcesは各リソースのIDをURLに含めますが、resourceはそれを含めません。なぜなら、resourceは1つしか存在しないリソースを前提としているからです。
メリット
resourcesとresourceの使い分けにより、アプリケーションのルーティングを柔軟に設計することができます。また、これらのメソッドを使用することで、繰り返しのないDRYなコードを書くことができ、また生成されるURLもRESTfulな設計に基づいているため、他の開発者にとって理解しやすいコードになります。