DAY26 Ruby on rails Routing(1)

TOKHEE·2024년 4월 29일

1. Rails ルーターの目的

  • URLを認識してコントローラーのアクションに渡す
  • パスとURLを生成し、ビューでの文字列ハードコーディングの必要をなくす

1) コードにURLを接続

  • GET /patients/17 のリクエスト -> ルートテーブルをチェック -> マッチングルート get '/patients/:id', to: 'patients#show'
  • リクエストは params{ id: '17' } として、patients コントローラーの show アクションに渡される

2) コードからパスとURLを生成

  • ルート定義 get '/patients/:id', to: 'patients#show' -> get '/patients/:id', to: 'patients#show', as: 'patient' に修正可能
  • コントローラーで @patient = Patient.find(17) としてインスタンス変数を宣言
  • ビューで patient_path(@patient) を使用 -> 自動的に /patients/17 のパスを生成、ルーターヘルパーでIDの指定は不要

2. リソースルーティング

  • 与えられたリソースフルコントローラーのために、すべての一般的なルートを迅速に宣言する
  • index, show, new, edit, create, update, destroy を個別に宣言する代わりに、一行ですべて宣言する

1) ウェブ上のリソース

  • ブラウザはHTTPメソッド(GET, POST, PATCH, PUT, DELETE)を使用して作られたリクエストでRailsにページリクエストをする

以下のようなリクエストをRailsが受ける
DELETE /photos/17

Railsはこのリクエストをコントローラーアクションにマッピングするためにルーターを要求する
この時、最初にマッチングされるルートが
resources :photos

であれば
Railsは params 内に { id: '17' } を入れて
photos コントローラーの destroy メソッドに送る。

2) CRUD、Verbs、および Actions

  • 規約に従って、各アクションはデータベースの特定のCRUD作業にマッピングされる
  • Rails ルートは指定された順序に従ってマッチングされる
    resources :photos
    のようなコードがある場合、以下の7つのルートを生成する
HTTP VerbPathController#ActionUsed for
GET/patientspatients#index全患者のリストを表示するページのパス
GET/patients/newpatients#new新しい患者を作成するフォームのページのパス
POST/patientspatients#create新しい患者を作成する
GET/patients/:idpatients#show特定の患者を表示する
GET/patients/:id/editpatients#edit特定の患者を編集するフォームのページのパス
PATCH/PUT/patients/:idpatients#update特定の患者を更新する
DELETE/patients/:idpatients#destroy特定の患者を削除する

3) パスとURLヘルパー

Helper FunctionURL PatternDescription

| photos_path | /photos | 全ての写真のリストを表示するページのパス |
| new_photo_path | /photos/new | 新しい写真を作るフォームがあるページのパス |
| edit_photo_path | /photos/:id/edit | 特定の写真を編集するフォームがあるページのパス。例: edit_photo_path(10)/photos/10/edit を返す |
| photo_path | /photos/:id | 特定の写真の詳細ページのパス。例: photo_path(10)/photos/10 を返す |

4) 複数のリソースを一度に定義

  • 複数のリソースのためのルートを作る必要がある場合、resourcesの単一呼び出しですべてを定義し、タイピングを減らすことができる

resources :photos, :books, :videos

上記のコードと

resources :photos
resources :books
resources :videos

このコードは同じです。

0개의 댓글