Help us understand the problem. What is going on with this article?

Railsのresourcesとresourceついて

More than 1 year has passed since last update.

はじめに

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

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

Atsushi_
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした