打造Rails App(一) - MVC架構
在Alpha camp 大航道課程中,以Rails專案打造自己的第一個Rails App運用到的就是MVC的方法。Model、View 和 Controller 簡稱為MVC。
MVC互動
- 當瀏覽器透過URL連到我們的網址時,第一個接手處理的是路徑對照表Route。
- Rails中的Route會根據接受到的HTTP Request Method及URI比對Route中對照表的資料,並決定由controller中哪個Action繼續執行下一步,而這個Action則會決定要執行什麼動作。
- 被指派任務的Action進而操作Model。
- Model則運用Active Record去交換資料,並進行Database的操作。
- Model從Database取得需要的資料。
- Model將資料回傳到Action Controller,但是接收的資料都未經過整理。
- Action Controller將處理完畢的資料交給View樣板化。
- 資料經過View樣板化回傳Browser呈現給使用者看。
Model
主要用於應用程式的商業邏輯(Business Logic)相關的資料以及對資料的處理方法。商業邏輯用來描述應用程式功能性的演算法,及資料庫與使用者介面之間資料的交換。Model封裝了應用程式中對資料的存取,並提供了可重複使用的函式庫,例如資料庫存取的抽象化、mail的遞送、資料的驗證及稽核都會在此處理。
Reference: [資訊] 什麼是MVC?What’s Model-View-Controller?
目錄:
與Model相關的檔案放在下列路徑,
app/models
透過在終端機執行下列指令建立為專案(Photo)所命名的model及對應的migration檔案:(在此以phtoto為例)
$ rails generate model photo
檔名規則:Name model ,檔名就會是 name.rb ; 所以在這是 photo.rb
若Database有相對應的Table,維持Rails的「慣例優於設定」資料表的命名慣例是「小寫 + 複數」,names。
View
用來呈現由Model取得的資料,以及蒐集使用者互動資料的網頁,HTML、CSS、JavaScript都是使用此方式呈現。
目錄:
與View相關的檔案放在下列路徑,
app/views
圖例中,與PhotosController相關的View都會存放在 app/views/photos 目錄中。如果執行的是 PhotosController的 index Action,沒特別聲明 render 方法的話,依照慣例預設會去找 app/views/photos/index.html.erb這個檔案。
而這個 index.html.erb的附檔名本身也是有特別意義的:
- 最後面的 erb是 Embedded Ruby 的縮寫,表示這個檔案會由 Ruby 標準函式庫中的 ERB 樣版引擎進行解讀。你可以在這個檔案裡寫一些 Ruby 語法,例如陣列的 each或 map方法以及像是產生超連結的 link_to方法。
- 而中間的 html表示這個檔案在被 ERB 樣版引擎處理後會被輸出成 HTML。
Reference : Model、View、Controller 三分天下
Controller
- 蒐集使用者於view元件中所輸入的資料並決定由哪一支程式進行資料處理。
- 接收Model回傳的資料並在解析後傳遞給view元件呈現。
- 所有程式的例外處理及流程控制。
目錄:
與Controller相關的檔案放在下列路徑,
app/controllers
透過在終端機執行下列指令建立為專案(Photo)所命名的controller檔案:(在此以phtoto為例)
$ rails generate controller photos
然後目錄下就建立了名為photos_controller.rb的controller了
通常每個 Controller 會有自己獨立的檔案,而且檔案的名字跟類別的名字是對得起來的。規則很簡單,就是「大寫字元改成底線加小寫」。舉例來說,如果類別的名稱叫做 PhotosController,檔案名字則為photos_controller.rb