##はじめに
resourcesとresourceについて初歩的ではありますが、備忘録をかねてまとめたいと思います。
##①Railsのresourcesについて
まずは、resourcesについてまとめたいと思います。
config/routes.rbにresources :hoges
と1行を書くのみで複数のルーティングが定義されます。
resources :hoges
複数のルーティングとは以下の通りです。
$rake routes
hoges GET /hoges(.:format) hoges#index
POST /hoges(.:format) hoges#create
new_hoge GET /hoges/new(.:format) hoges#new
edit_hoge GET /hoges/:id/edit(.:format) hoges#edit
hoge GET /hoges/:id(.:format) hoges#show
PATCH /hoges/:id(.:format) hoges#update
PUT /hoges/:id(.:format) hoges#update
DELETE /hoges/:id(.:format) hoges#destroy
HTTPメソッドのGET、POST、PUT(PATCH)、DELETEがそれぞれ、show、create、update、destoryというアクションに対応しています。
例えば、GET /hoges/:id
というルールであればHoges
の集合体に対して特定のidを絞り込んだ結果をGET(取得)するという動作を表しています。
また、POST /hoges(.:format)hoges#create
にidがありませんが、idは自動採番されるため、不要とされています。
このような仕組みがRESTの考え方に一致したものとなっています。「RESTful」なアプリケーションを作成することが、効率的にRailsのアプリケーションを構築する方法となっています。
##②RESTとは
REST(REpresentational State Transfer)の略称で、Webサービスの設計モデルです。RESTなWebサービスは、そのサービスのURIにHTTPメソッドでアクセスすることでデータの送受信を円滑に行います。
詳細はこちらの記事が非常に参考になります。
https://qiita.com/TakahiRoyte/items/949f4e88caecb02119aa
##③resourceについて
resourcesは「人」や「本」などのようにアプリケーション上に「複数存在する」リソースを扱う場合に用いていました。
自身のプロフィールの様に、ログインユーザーからみてアプリケーション上、1つしか存在しない様なリソースが存在します。その様なリソースについて、REST的なルーティングを定義したい場合には、resource
を定義をします。
以下の様にルーティングの定義を行います。
resource :hoge
以下の様なルーティングの確認ができます。
$rake routes
new_hoge GET /hoge/new(.:format) hoges#new
edit_hoge GET /hoge/edit(.:format) hoges#edit
hoge GET /hoge(.:format) hoges#show
PATCH /hoge(.:format) hoges#update
PUT /hoge(.:format) hoges#update
DELETE /hoge(.:format) hoges#destroy
POST /hoge(.:format) hoges#create
resourcesの場合は、一覧表示であるindex
がありましたが、resourceの場合は、indexの定義がされません。プロフィールは必ずログイン中のユーザーに紐付くので、「:id」による絞り込みも必要なくなります。
resourcesとresourceの使い分けを行い、より良い実装を行いたいと思います。
以上となります。
ご参考になれば幸いです。