Ruby on Rails 的 View 初學雜記

這篇筆記記錄了 Ruby on Rails (以下簡稱 ROR) 關於 view 的 render 的相關記錄。

新手上路,如果有寫錯,歡迎拍磚 :P


ROR 或是其他有遵循 MVC 架構的 Framework,像是 PHP 的 Framework 或是 Node.js 的 Express, Sails 等等,通常關於 view (MVC的V) 的部分,都可以使用 Template Engine 去編寫你的 HTML,並且在 Template 內可執行該語言的程式,進行資料的重複 render,甚至 template 再分出 template (有點像是 widget 或是 partials 的觀念),主要是為了遵循 DRY 結構,模組化你畫面上的 HTML 結構等。



為什麼需要樣板呢?
靜態的 HTML 是不能夠透過程式產生的 HTML 文件,透過 Template Engine,用程式動態 render 出 HTML 文件。


Templates (樣板) 的種類
在這個世界上, Template Engine 應該是學不完了(眼神死,是說也沒必要把它學完XD)...,通常 template 的風格其實應該就那幾種...
  • 以其他語言來說,在 PHP,我聽過的樣板是 Smarty, 繼 Laraval 之後,才知道有 blade。
  • Node.js 的 Web Framework 呢,ejs, Jade 都是蠻常用到的 Template Engine,如果你寫 PHP 又愛用 jade , 還有 jade-php 可以用。
  • 至於這篇文章的主角 Rails,預設使用的 Template Engine 是 ERb (Embedded Ruby)。
  • ERb 的檔名通常會是 .html.erb (ex:index.html.erb),檔案的內容就是 HTML 再加上 Ruby code,還有 ERb 不一定只能用來產 HTML。

以下語法你會常在 erb 看到的語法,蠻基本的風格大致上就這兩種:
請注意 <% 跟 <%= 的使用上的差異
  1. 如果你要在 template 內執行一段 ruby:
    <% tweet = Tweet.find(1) %>
  2. 執行 ruby 並印出 (Print) 執行後的結果 (有等號)
    <%= tweet.content %>
  3. 單行註解
     <%# 註解我 %>
  • 如果要註解一整段 <%- output = false -%>
  • 如果 HTML 的編寫還是很麻煩,HAML 也是一種選擇,使用簡短的縮排方式簡化 HTML 的編寫。



關於 yield

在 erb 嵌入 <%= yield %> 會被替換成個別頁面內容的樣板,比方說該網站每個頁面都會共用 HTML 的 head 結構,我們只是依照不同的頁面顯示 body 的內容,那個 <% yeild %> 就可以用來當做替換其他樣板的站位符。

yield 的功能其實有點多,我只學到這麼一點初淺皮毛,需要更詳細的話可以看下面的參考網址。

<html>
  <head>
    <title>Win.筆記</title>
  </head>
  <body>
    <%= yield %>
  </body>
</html>

參考

留言

這個網誌中的熱門文章

[Android] 筆記 手機上測試自己的 APP

解決fatal: Not a git repository (or any of the parent directories): .git錯誤

[Android 筆記] 設定 ImageView 的圖檔來源