打造Rails App(一) - MVC架構

Nathan Lee
Change or Die!
Published in
5 min readOct 13, 2017

在Alpha camp 大航道課程中,以Rails專案打造自己的第一個Rails App運用到的就是MVC的方法。Model、View 和 Controller 簡稱為MVC。

MVC互動

  1. 當瀏覽器透過URL連到我們的網址時,第一個接手處理的是路徑對照表Route。
  2. Rails中的Route會根據接受到的HTTP Request Method及URI比對Route中對照表的資料,並決定由controller中哪個Action繼續執行下一步,而這個Action則會決定要執行什麼動作。
  3. 被指派任務的Action進而操作Model。
  4. Model則運用Active Record去交換資料,並進行Database的操作。
  5. Model從Database取得需要的資料。
  6. Model將資料回傳到Action Controller,但是接收的資料都未經過整理。
  7. Action Controller將處理完畢的資料交給View樣板化。
  8. 資料經過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的附檔名本身也是有特別意義的:

  1. 最後面的 erb是 Embedded Ruby 的縮寫,表示這個檔案會由 Ruby 標準函式庫中的 ERB 樣版引擎進行解讀。你可以在這個檔案裡寫一些 Ruby 語法,例如陣列的 each或 map方法以及像是產生超連結的 link_to方法。
  2. 而中間的 html表示這個檔案在被 ERB 樣版引擎處理後會被輸出成 HTML。

Reference : Model、View、Controller 三分天下

Controller

  1. 蒐集使用者於view元件中所輸入的資料並決定由哪一支程式進行資料處理。
  2. 接收Model回傳的資料並在解析後傳遞給view元件呈現。
  3. 所有程式的例外處理及流程控制。

目錄:

與Controller相關的檔案放在下列路徑,

app/controllers

透過在終端機執行下列指令建立為專案(Photo)所命名的controller檔案:(在此以phtoto為例)

$ rails generate controller photos

然後目錄下就建立了名為photos_controller.rb的controller了

通常每個 Controller 會有自己獨立的檔案,而且檔案的名字跟類別的名字是對得起來的。規則很簡單,就是「大寫字元改成底線加小寫」。舉例來說,如果類別的名稱叫做 PhotosController,檔案名字則為photos_controller.rb

--

--