こんにちは。
我是一個從 35 歲零經驗開始立志成為 Web 工程師,天天都在跟自己那顆無狀態的大腦奮戰的人。
這篇文章會從 Rails 的基礎到使用者註冊功能,做一個淺顯易懂的解說!
Rails 的運作機制,用一句話來說就是:「超強餐廳的營運流程」!
資料庫是「冰箱」,視圖(畫面顯示)是「擺盤」,而負責統籌這些的就是「控制器(店長)」。
先把這個概念放在腦海一角,接著快速看下去吧!
Rails 的基礎 Ruby,是以「全部都是物件」這個理念設計而成的。
物件,簡單來說就是把「資料(屬性)」和「處理(方法)」合在一起的便利元件。
舉例來說:像是「智慧型手機」。
資料(屬性)= 螢幕大小、電量、本體顏色
處理(方法)= 打電話、拍照、打開 App
在 Ruby 的世界裡,字串和數字也都會像這支「智慧型手機」一樣,被當成具備各種便利功能(方法)的元件來處理。
所以操作起來很直覺。
Web 應用程式的基本架構「MVC(Model-View-Controller)」,就是 Rails 的核心。
透過把角色分成三部分,就能更有效率地開發,這種設計方式稱為架構(architecture)。
【圖解】MVC = 餐廳的作業流程
客人(從瀏覽器來的請求)
│
▼
[ 路由(routes.rb) ] = 引導員
「我來帶您前往對應的服務人員!」
│
▼
[ Controller (C) ] = 店長(整體指揮中心)
「廚師,請把〇〇的食材拿出來!服務生,把餐點漂亮地擺盤!」
│
├──▶ [ Model (M) ] = 廚師與冰箱(與資料庫互動)
│ 「我從資料庫(冰箱)取出資料!」
│
└──▶ [ View (V) ] = 服務生(畫面顯示)
「把資料嵌入 HTML(ERB),漂亮地顯示出來!」
Rails 預設提供「開發(development)」、「測試(test)」和「正式環境(production)」三種環境(店面),會依照狀況自動切換。真是無微不至!
直接操作資料庫需要另一種語言「SQL」,但只要使用 Active Record,就能只靠 Ruby 程式碼直覺地操作資料庫。
可以把它想成「SQL 翻譯秘書」。
另外,資料庫周邊還有幾個很重要的功能。
1. Migration
管理資料庫的設計圖(建築增改建的歷程)。
2. 驗證(Validation)
「密碼要至少幾個字元以上!」「Email 要是正確格式!」之類的,
負責擋下不正確資料的「關卡守門員」。
3.has_secure_password
不會直接儲存密碼,而是將其加密(雜湊化)後
安全保存的超強金庫管理方法。
在畫面顯示(View)中,會使用能在 HTML 裡嵌入 Ruby 的「ERB」。
這裡很重要的是「DRY 原則(Don't Repeat Yourself:不要重複自己)」。
舉例來說:不是每次都手寫公司的地址,而是做一個「橡皮印章」然後一直蓋上去的概念。
在 Rails 中,會把共用的頁首等內容切分成「版面配置(layout)」或「partial(局部樣板)」來重複使用,這就像做出這個橡皮印章一樣。
Rails 的自動化測試非常強大。透過反覆進行「red(失敗)→ green(成功)→ REFACTOR(整理程式)」的循環,可以防止修好的 bug 又復活,也就是「迴歸錯誤(regression bug)」。
這就像是在把餐點送給客人之前,先雇一個「會自動檢查訂單的機器人」。
如果出現錯誤,就使用 console 或 debug 方法,一邊暫停一邊找出原因吧。
把前面學到的知識全部用上,做出來的就是使用者註冊功能。
使用 form_with,可以建立與 Active Record(資料庫)連動的輸入表單(接待單)。
註冊成功時,會搭配重新導向(redirect)與 flash,顯示一次性的暫時訊息「註冊完成了!」。
失敗時,則會連同錯誤訊息一起重新顯示輸入表單(重新渲染),讓使用者修正後再送出。
順帶一提,如果再連接像「Gravatar」這樣的外部服務,也可以根據電子郵件地址快速顯示個人頭像。
把重點用 3 行整理如下。
・物件 是「把資料和處理整合在一起的便利元件」。
・MVC 是「店長(C)・廚師(M)・服務生(V)」的最強餐廳體制。
・Active Record 是把 Ruby 語言翻譯成資料庫語言的超強秘書。
一開始可能會出現很多術語,讓人有點混亂。
不過,只要先能想像每個角色的分工,就會覺得 Rails 是個非常貼心的框架!
如果這篇文章能對大家的學習有所幫助,我會很高興。
下一篇會帶來 Rails 的後篇!
PRUM 的工程師有 95% 以上都是從零經驗錄用的。
如果有興趣,也歡迎來看看公司網站。
公司網站
我們也有經營整理工程師會用到的文章網站。如果有興趣,也歡迎來看看。
對工程師有幫助的文章網站