https://ihower.tw/rails/actionview.html
<%= yield %>
<!-- 樣板的 "動態內容" 置入處,動態內容指的是,一切套用此版型的頁面 -->
<%= render :partial => "header" %>
<!-- 局部樣板 Partials:上面例子,意指將檔案 _heater.html.erb 的內容,插入當前位置 -->
ActionView 是 Rails 中處理 View 的元件名稱。 簡單說,View 就是指 HTML。 ActionView 就是動態產生的 html 檔案。 (什麼是 View ? MVC 架構: https://ihower.tw/rails/intro.html )
腦補:可被替換的內容稱為 Template?
Tem:temporarily
plate:圖版
製作網站時,Template(樣板)是動態"產生" HTML 的方式。 樣板的概念:我們把網站中,每個頁面相同的部分抽出,例如 header、footer 的 html,將它們放在 "版型 (Layout)" 中, 則每個使用這個版型的內容(Template)都會使用這份 header、footer。想修改 header、footer 也只要在版型中修改就好。
現在有很多 Template 引擎,來幫助做這件事。
在 Rails 使用樣板,要了解他的檔案位置和名稱是有玄機的,
app/views/Controller/ActionName.html.erb
# 可翻譯為:
# 網站(app)中放 html 的資料夾(views)
# 使用共同樣板(Controller)檔案的 .html.erb(ActionView) 檔案
例如
app/views/welcome/index.html.erb
welcome
目錄是它的 Controller
名稱,
檔案第一段 index
是它的 Action
名稱,
附檔名
則是用來指定要用什麼方式、來產生什麼格式的文件:
index.html.erb
表示用 ERb 產生 HTML 格式的文件。
會有這樣慣例的原因,你可能已經猜到,那就是使用 ERb 不代表一定就是用來產生 HTML。 用什麼 Template 引擎 (在 Rails 中又叫作 Template Handler) 產生文件,和文件的 Format 格式是兩回事情。 所以 ERb 其實可以用來產生任何文字檔格式,例如 CSV、XML、JavaScript 等等。
_layout.html.erb
是一個專有檔案,即一個樣板版型檔,是一個完整的 html 檔案,可以讓不同 View(動態頁面)使用。
如果在 app/views/layouts
目錄下,
有跟某 "Controller" (上例會為 layouts
資料夾) 同名的 "Layout" 檔案(-layouts.html.erb
),
那這個 "Controller" 下的所有 "Views" 就會使用這個同名的 "Layout"。
_layout.html.erb
中的 <%= yield %>
會被替換成個別 Action
的樣板。
因此我們可以為全站的頁面建立共用的版型。 這個檔案預設是
app/views/layouts/application.html.erb。
也可指定 Controller 的 Layout。
_layout.html.erb
中有 #content
和 #sideBar
兩個可以放置 Template 的區域。
<!-- _layout.html.erb -->
<div id="sidebar">
<!-- 設定 ":sidebar" -->
<%= yield :sidebar %>
</div>
<div id="content">
<%= yield %>
</div>
我們可以在 View-A 這個頁面檔案中,同時設定這兩個區域的內容。
<!-- "content_for :... do"
這段內容會被置入到 _layout.html.erb 的 <%= yield :sidebar %> 中。 -->
<%= content_for :sidebar do %>
<ul>
<li>foo</li>
<li>bar</li>
</ul>
<% end %>