#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