Edited at

resourceとresourcesの違い


resources

resourcesは、複数のリソースに対するCRUD処理を行うためのルーティングを生成する(7つのCRUDすべて。)

※リソース名がbooksと複数形になっていることにも注意


resource

resourceは、ただ1つのリソースに対するCRUD処理を行うためのルーティングを生成する。

※リソース名がbookと単数形になっていることにも注意

こちらの場合は、リソースは1つだけなのでurlに:idを含む必要がない。

そして、一覧画面(indexアクション)が必要ないので、/bookに対するGETリクエストはそのリソースの表示(showアクション)であることが分かる。

(例としてrails routesでのpath)

/mobile/password_resets/:id(.:format)  ←idが必要 

/mobile/account/edit(.:format)    ←idがいらない


つまりは「idがいるかいらないか」。pathにidが含まれなくなる。

resourcesは「人」や「本」などのようにアプリケーション上に「複数存在する」リソースを扱う場合に用いていました。

自身のプロフィールの様に、ログインユーザーからみてアプリケーション上、1つしか存在しない様なリソースが存在します。その様なリソースについて、REST的なルーティングを定義したい場合には、resourceを定義をします。


たとえば、/profileでは常に「現在ログインしているユーザー自身」のプロファイルを表示し、他のユーザーidを参照する必要がないとします。このような場合には、単数形リソース (singular resource) を使用してshowアクションに (/profile/:idではなく) /profileを割り当てることができます。


参考

https://railsguides.jp/routing.html

https://rails-study.net/resources-resource/

https://qiita.com/Atsushi_/items/bb22ce67d14ba1abafc5