Ruby on Rails 剛建立完專案後, 馬上要碰到的就是 config/* 和 MVC 的程式撰寫/修改等, 所以此篇就先簡單介紹 config/* 與 MVC 之間的檔案關聯性.
config 目錄的檔案列表
config/
environments/ - 目錄
initializers/ - 目錄
boot.rb
database.yml
environment.rb
routes.rb
MVC 的定義
RoR 的程式主要就是架構在 MVC (Model / View / Controller) 來撰寫, 那 MVC 代表哪些東西?
- Model: 負責處理與資料庫之間的溝通 (繼承自 ActiveRecord::Base 的 class)
- View: 產生前端頁面的 Template, 使用者是透過 View 秀出的頁面去送出 GET/POST 等要求.
- Controller: 處理使用者的要求(POST/Create、GET/Read、PUT/Update、DELETE/Delete), 若要存取資料庫的資料, 則與 Model 溝通(new/find Model class), 最後再將資料送給 View, 透過 View 的 Template 產生使用者看到的頁面.
- 更多 MVC 介紹可見: MVC - 維基百科,自由的百科全書
Rails 的 config 到 MVC 流程說明
首先若使用者輸入 http://DOMAIN/posts/1, 當此網址丟到 Server 後, Rails 那會做哪些事情? (註: 下述程式流程採用 scaffold 預設流程)
上圖中, 畫的就是使用者輸入的資料送進 Rails 後, Rails 程式運作流程:
- 資料由 Server 接收送到 Rails framework 中.
- 首先進入 config/boot.rb, boot.rb 會去呼叫 environment.rb.
- environment.rb 會將 environments, initializers 這兩個目錄下的檔案都載入進來, 最重要的 database 設定檔也是在此同時被載入進來(註: 這些載入我並沒有詳看 Source code, 是採猜測的方式, 若有錯誤還請指點), 於 environment.rb 會去拉 app 目錄下的 overrides.rb (此檔案預設不存在, 是可以讓你做額外擴充用, ex: 錯誤訊息中文化, 就是可用此將檔案, 將物件取代掉).
- 最後進入 routes.rb, 此檔是設定網址參數 如何拆解 並帶入 params 變數, 拆解完的變數再送給 app 的 Controller.
- 再來進入 app 的目錄, 就是跑 MVC 的程式.
- routes.rb 拆解的參數, 依上面的範例, 會是對應到 post GET /posts/:id {:action=>"show", :controller=>"posts"}
- 拆解送到 Controller 會是 :controller => "posts", :action => "show", :id => "1", 於此會使用 posts controller 的 show action
- 於 Controller show 中, 使用 Post.find(params[:id]), 此 Post.find() 會去 Model 的 Post class 做 find() 動作.
- Controller 接收 Model 查 DB 後回傳的資料, 再將資料送到 View 的 Template, 於此就是回傳給使用者的頁面就產生完成.
- 再將此頁面回傳給使用者的瀏覽器即可.
在此附上上述兩張圖的 Dia 原始檔 (之後所有圖檔都會擺在這個檔案裡面.), 若覺得 畫的不對 或者 圖/線 用的不好, 表達不清楚等, 願意幫我改的話, 請自行下載修改, 再讓我更新圖片. Orz..
謝謝你的分享囉 ^^
喔喔, 那個人是用 dia 裡面的 UML "相關角色" 的圖哩. XD