更新履歴
日付 | 更新内容 |
---|---|
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とか
- 与えられた拡張子に応じたテンプレートを呼び出す
- .htmlを指定した場合には、てhtml形式の出力を生成するテンプレートが呼び出される
/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メソッドのごく基本的な機能について学んだことを忘備録として記事にしました。
もっと多くのことを学んで有用な記事をかけるように勉強していきます。