LoginSignup
238
202

More than 5 years have passed since last update.

Railsのresourcesとresourceついて

Posted at

はじめに

resourcesとresourceについて初歩的ではありますが、備忘録をかねてまとめたいと思います。

①Railsのresourcesについて

まずは、resourcesについてまとめたいと思います。

config/routes.rbにresources :hogesと1行を書くのみで複数のルーティングが定義されます。

config/routes.rb
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を定義をします。

以下の様にルーティングの定義を行います。

config/routes.rb
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の使い分けを行い、より良い実装を行いたいと思います。

以上となります。
ご参考になれば幸いです。

238
202
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
238
202