要感受 Ruby on Rails 的快速, 由 Scaffold 來學習/修改會是比較快的方法, 所以先看 Scaffold 產生的程式流程是怎麼跑的.
RoR REST 與 HTTP 標準協定對應
首先要先了解 RoR controller 是REST實作:(下面是 CRUD 與 REST 的對照)
- CREATE = POST: 新增資料
- READ = GET: 取得資料
- UPDATE = PUT: 更新資料
- DELETE = DELETE: 刪除資料
Scaffold Controller Function 列表
Scaffold 產生於 Controller 的 function 有 7 個: (routes => map.resources :posts)
- show: 處理單一資料的 GET request, ex: http://domain/posts/1, routes: GET /posts/:id
- create: 處理 POST request, 並將建立新的一筆資料, ex: http://domain/posts, routes: POST /posts
- update: 處理 PUT request, 並將指定的資料做更新, ex: http://domain/posts/1, routes: PUT /posts/:id
- destroy: 處理 DELETE request, 清除此筆資料紀錄, ex: http://domain/posts/1, routes: DELETE /posts/:id
- index: 秀出目前所有資料, http://domain/, routes: GET /
- new: 建立新資料用的欄位頁面, 送出會執行 create 功能, ex: http://domain/posts/new, routes: GET /posts/new
- edit: 取得並列出指定資料以供修改用, 送出會執行 update 功能, ex: http://domain/posts/1/edit, routes: GET /posts/:id/edit
- 註: Controller 每個 function 都等於是一個頁面.
Scaffold 產生 CRUD 的運作流程
通常網頁程式的 Form 的寫法是 透過 GET/POST 將資料送到 處理/檢查頁面, 若有錯誤直接把錯誤訊息秀出, 再將原先 Form 的內容頁 load 出來/或者導回原本秀 Form 的頁面, 讓 User 再次輸入資料, 新增/修改 完成後, 再導到完成頁.
在此把 Scaffold 產生出來頁面的處理流程: (都由首頁出發)
- Index -> New -> Create(Action) -> Index
- Index -> Show -> Edit -> Update(Action) -> Index
- Index -> Edit -> Update(Action) -> Index
- Index -> Destroy(Action) -> Index
- 註: 標 Action 的, 都沒有 View 的 HTML 頁面, 都是透過這幾個 Controller 的 function 來處理資料(處理資料於檢查/寫入 DB 等是 Model 負責), 這些 Action 都沒有頁面, 都是處理完成就導到完成頁, 處理/檢查失敗則會把原本上一個產生 Form 的頁面 load 進來(網址會是 Action 的頁面網址), 可參考下圖.
在此附上此圖的 dia 原始檔(之後所有圖檔都會擺在這個檔案裡面.), 若覺得這樣子 畫不對 或者 圖/線 用的不好, 願意幫我改的話, 請自行下載修改, 再讓我更新圖片. 謝謝.
關於 Rails 的架構, 可另外參見此圖: (取自: Ruby on Rails (ROR))