はじめに
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
すると、ProfilesControlle
rの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な設計に基づいているため、他の開発者にとって理解しやすいコードになります。