Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
158
Help us understand the problem. What is going on with this article?
@Atsushi_

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

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

158
Help us understand the problem. What is going on with this article?
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
Atsushi_

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
158
Help us understand the problem. What is going on with this article?