1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[忘備録]railsのresources・resourceメソッドについて

Last updated at Posted at 2019-03-22

更新履歴

日付 更新内容
2019/3/22 初稿
2019/3/23 resourceメソッドで生成されるURLを修正
2019/3/28 resourceメソッドについて学習したことを追加

本記事の目的

  • 自身のキャリアのため、最近勉強し始めたrailsの忘備録のメモを記録
  • 今回resources,resourceメソッドについてまとめる

resourcesメソッドって?

  • あるリソースに対する標準的な操作(CRUD)がまとめてルート定義される
  • config/routes.rbにresources :(リソース対象)の形式記述する
config/routes.rb
Rails.application.routes.draw do
  resources :books
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

上記コードで定義されるルート一覧

bash
[vagrant@default railsbook]$ rails routes
                   Prefix Verb   URI Pattern                                                                              Controller#Action
                    books GET    /books(.:format)                                                                         books#index
                          POST   /books(.:format)                                                                         books#create
                 new_book GET    /books/new(.:format)                                                                     books#new
                edit_book GET    /books/:id/edit(.:format)                                                                books#edit
                     book GET    /books/:id(.:format)                                                                     books#show
                          PATCH  /books/:id(.:format)                                                                     books#update
                          PUT    /books/:id(.:format)                                                                     books#update
                          DELETE /books/:id(.:format)                                                                     books#destroy

(余談)CRUDとは

  • データベースのリソースに対する操作(Create,Read,Update,Delete)のまとめて略したもの
  • Webアプリケーションで基本的に実装されている4種類の機能

resourcesメソッドで定義されるルート一覧

URLパターン 呼び出すアクション HTTPメソッド 役割
/(リソース名)(.:format) index GET 一覧画面を表示
/(リソース名)/:id(.:format) show GET idで指定されたリソースの詳細画面を表示
/(リソース名)/new(.:format) new GET 新規登録画面を表示
/(リソース名) create POST 新規登録画面の入力内容で登録処理
/(リソース名)/:id/edit(.:format) edit GET :idで指定したリソースの編集画面を表示
/(リソース名)/:id(.:format) update PATCH idで指定したリソースの更新処理
/(リソース名)/:id(.:format) destroy DELETE :idで指定したリソースの削除処理

:idと:formatって何だろう?

  • /books/:id/edit(.:format)のように「:名前」でパラメータが指定されている
  • 変数のプレースホルダーで任意の値を代入してアクションメソッドに渡すことができる
    • ()がついているパラメータは省略可能であることを意味する
  • URL経由で任意のパラメータを受け渡しできることを覚えておく
  • (.:format)は、出力形式を指定するパラメータ
    • .htmlを指定した場合には、てhtml形式の出力を生成するテンプレートが呼び出される
      • ~.html.erbとか
    • .jsonを指定した場合にはjson形式で出力される
      • ~.json.jbuilderとか
    • 与えられた拡張子に応じたテンプレートを呼び出す

/books/:id/edit(.:format)のリクエストURL例.

  • http://localhost:3000/books/108/edit
    • booksテーブルのidカラムの値が108の編集画面を表示する

resourceメソッドとは

  • 単一のリソースを対象として標準的な操作(CRUD)のルートが定義される
    • resoucesであればbooks(複数形)を対象としている
    • resourceメソッドは1冊のbookを対象としてルートを定義

resourcesメソッドと何が違うの

  • indexアクションに対応するルートが定義されない
  • show/edit/deleteのパスにはパラメータを要求しない
    • 単数形であるためidが必要ない
URL アクション HTTPメソッド 役割
/config(:format) show GET リソースの詳細画面を表示
/config/new(:format) new GET 新規登録画面を表示
/config/create create new 新規登録画面の入力内容で登録処理
/config/edit edit GET 既存のリソースの編集画面を表示
/config update PATCH 編集画面の入力内容で更新処理
/config delete DELETE リソースの削除処理

何に使えそうか

  • ログインの成功後にsessionにユーザ情報を格納
  • sessionからユーザ情報を取り出せるため自分自身に対しての処理(updateとかdelete)はresourceで宣言してもいいかもしれない

まとめ

  • resourcesメソッドをroutes.rbに記述することで、CRUDを提供するためのルートが定義される
  • :名前でアクションメソッドにパラメータを渡すことができる

今回はresourcesメソッドのごく基本的な機能について学んだことを忘備録として記事にしました。
もっと多くのことを学んで有用な記事をかけるように勉強していきます。

1
4
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
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?