こんにちは。
我是一個從 35 歲零經驗開始立志成為 Web 工程師,天天都在跟自己那顆無狀態的大腦奮戰的人。

這篇文章會從 Rails 的基礎到使用者註冊功能,做一個淺顯易懂的解說!

結論(先簡單說)

Rails 的運作機制,用一句話來說就是:「超強餐廳的營運流程」!
資料庫是「冰箱」,視圖(畫面顯示)是「擺盤」,而負責統籌這些的就是「控制器(店長)」。

先把這個概念放在腦海一角,接著快速看下去吧!

本篇

1. Ruby 的本質:「全部都是物件」是什麼意思?

Rails 的基礎 Ruby,是以「全部都是物件」這個理念設計而成的。
物件,簡單來說就是把「資料(屬性)」和「處理(方法)」合在一起的便利元件。

舉例來說:像是「智慧型手機」。

資料(屬性)= 螢幕大小、電量、本體顏色

處理(方法)= 打電話、拍照、打開 App

在 Ruby 的世界裡,字串和數字也都會像這支「智慧型手機」一樣,被當成具備各種便利功能(方法)的元件來處理。
所以操作起來很直覺。

2. MVC 架構:餐廳的最強團隊

Web 應用程式的基本架構「MVC(Model-View-Controller)」,就是 Rails 的核心。
透過把角色分成三部分,就能更有效率地開發,這種設計方式稱為架構(architecture)。

【圖解】MVC = 餐廳的作業流程

客人(從瀏覽器來的請求)
   │
   ▼
[ 路由(routes.rb) ] = 引導員
「我來帶您前往對應的服務人員!」 
   │
   ▼
[ Controller (C) ] = 店長(整體指揮中心)
「廚師,請把〇〇的食材拿出來!服務生,把餐點漂亮地擺盤!」 
   │
   ├──▶ [ Model (M) ] = 廚師與冰箱(與資料庫互動)
   │    「我從資料庫(冰箱)取出資料!」 
   │
   └──▶ [ View (V) ] = 服務生(畫面顯示)
        「把資料嵌入 HTML(ERB),漂亮地顯示出來!」

Rails 預設提供「開發(development)」、「測試(test)」和「正式環境(production)」三種環境(店面),會依照狀況自動切換。真是無微不至!

3. 資料庫與 Active Record:能幹的翻譯與關卡

直接操作資料庫需要另一種語言「SQL」,但只要使用 Active Record,就能只靠 Ruby 程式碼直覺地操作資料庫。
可以把它想成「SQL 翻譯秘書」。

另外,資料庫周邊還有幾個很重要的功能。

1. Migration
   管理資料庫的設計圖(建築增改建的歷程)。

2. 驗證(Validation)
 「密碼要至少幾個字元以上!」「Email 要是正確格式!」之類的,
   負責擋下不正確資料的「關卡守門員」。

3.has_secure_password
  不會直接儲存密碼,而是將其加密(雜湊化)後
   安全保存的超強金庫管理方法。

4. 前端與 DRY 原則:用印章省去重工

在畫面顯示(View)中,會使用能在 HTML 裡嵌入 Ruby 的「ERB」。
這裡很重要的是「DRY 原則(Don't Repeat Yourself:不要重複自己)」。

舉例來說:不是每次都手寫公司的地址,而是做一個「橡皮印章」然後一直蓋上去的概念。

在 Rails 中,會把共用的頁首等內容切分成「版面配置(layout)」或「partial(局部樣板)」來重複使用,這就像做出這個橡皮印章一樣。

5. TDD(測試驅動開發)與除錯:雇用測驗機器人

Rails 的自動化測試非常強大。透過反覆進行「red(失敗)→ green(成功)→ REFACTOR(整理程式)」的循環,可以防止修好的 bug 又復活,也就是「迴歸錯誤(regression bug)」。
這就像是在把餐點送給客人之前,先雇一個「會自動檢查訂單的機器人」。

如果出現錯誤,就使用 console 或 debug 方法,一邊暫停一邊找出原因吧。

6. 使用者註冊功能:Web 的接待櫃台

把前面學到的知識全部用上,做出來的就是使用者註冊功能。

使用 form_with,可以建立與 Active Record(資料庫)連動的輸入表單(接待單)。

註冊成功時,會搭配重新導向(redirect)與 flash,顯示一次性的暫時訊息「註冊完成了!」。

失敗時,則會連同錯誤訊息一起重新顯示輸入表單(重新渲染),讓使用者修正後再送出。

順帶一提,如果再連接像「Gravatar」這樣的外部服務,也可以根據電子郵件地址快速顯示個人頭像。

總結

把重點用 3 行整理如下。

・物件 是「把資料和處理整合在一起的便利元件」。

・MVC 是「店長(C)・廚師(M)・服務生(V)」的最強餐廳體制。

・Active Record 是把 Ruby 語言翻譯成資料庫語言的超強秘書。

一開始可能會出現很多術語,讓人有點混亂。
不過,只要先能想像每個角色的分工,就會覺得 Rails 是個非常貼心的框架!

如果這篇文章能對大家的學習有所幫助,我會很高興。
下一篇會帶來 Rails 的後篇!


PRUM 的工程師有 95% 以上都是從零經驗錄用的。
如果有興趣,也歡迎來看看公司網站。
:arrow_forward: 公司網站

我們也有經營整理工程師會用到的文章網站。如果有興趣,也歡迎來看看。
:arrow_forward: 對工程師有幫助的文章網站


原文出處:https://qiita.com/wata-sho/items/34010e35cd35c797d258


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝20   💬11   ❤️1
583
🥈
alicec
📝1   ❤️2
83
🥉
我愛JS
💬1  
4
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登