Layout, Render 与 View Helper

版型(Layout)
局部渲染(Partial Render)
View Helper
在上个章节介绍了 CRUD 的分解动作并实作了⼀个简单的投票系统,接下来这个章
节要花点时间介绍在 Rails 专案 MVC 架构的 V。
版型 Layout
随便打开⼀个在 app/views ⽬录里的档案,例如上个章节的候选⼈列表⾴⾯:

<h1>候选⼈列表</h1>
<%= link_to "新增候选⼈", new_candidate_path %>
<table class="table">
<thead>
<tr>
<td>投票</td>
...[略]...
<td>
<%= link_to "编辑", edit_candidate_path(candidate) %>
<%= link_to "删除", candidate_path(candidate), method: "de
lete", data: { confirm: "确认删除" } %>
</td>
</tr>
<% end %>
</tbody>
</table>

在这个档案( index.html.erb )里,看不到任何 <html> 、 <title> 或<body>
之类的 HTML 标签,但检视实际网⾴的原始码⼜都有,这是怎麽回事呢?
yield
以上⾯这个例⼦来说,Controller 在处理 View 的时候,并不只是单纯的只取⽤
index.html.erb 这个档案,⽽是会先取⽤ Layout 档案的内容(预设是
app/views/layouts/application.html.erb ),然後把 index.html.erb 的
内容填到 <%= yield %> 里。
版型的好处,就是不需要重复的写⼀堆长得⼀样的 HTML 标签,例如每个⾴⾯的⾴
⾸跟⾴尾通常不会有什麽变化,这种就是版型适⽤的地⽅。让我们看⼀下
app/views/layouts/application.html.erb 的内容:

<!DOCTYPE html>
<html>
<head>
<title>MyCandidates</title>
<%= csrf_meta_tags %>
<%= stylesheet_link_tag 'application', media: 'all', 'data
-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-tr
ack': 'reload' %>
</head>
<body>
<div class="container">
15 Layout,Render 与 View Helper
224
<%= yield %>
</div>
</body>
</html>

这里有几⾏需要说明⼀下:

  1. csrf_meta_tags ⽅法会在⾴⾯上产⽣ 跟
    两个 标签,⽤途主要是确保网站较不容易受到 CSRF(Cross-site
    request forgery)攻击。
  2. stylesheet_link_tag ⽅法会转换成 CSS 的
    标签。
  3. javascript_include_tag ⽅法会转换成 JavaScript 的 标签。

参考资料

[为你自己学Ruby on Rails]https://railsbook.tw/chapters/08-ruby-basic-4.html


<<:  CSS选择器(Selector)(DAY8)

>>:  Day06 - 根据需求画出 Flowchart 或是 State Diagram

30天学会C语言: Day 3-资料也要取名字!

型别 型别指的是资料的类型 因为电脑中的所有资料都是由1和0(二进位)表示,为了能表示不同种类的数值...

以终为始

曾有前辈说过,要以终为始。 程序结束在哪,就从那边开始追。 睡了两天,就在礼拜一列下想做的事情, 接...

解决line图文选单404问题

真的超哭,搞了很久才发现LINE的API有换过,所以URL要换成别的网址。 疯掉XD,这篇文主要分享...

轻松小单元 -工具篇

超连结真是伟大的发明,骗字数都靠他了 应办事项 软件名称 说明 网址 GCB LGPO 微软推出的 ...

OK集#28-白话文Excel-文字合并

说到文字合并,不晓得大家是不是跟我一样,只会用「&」去把不同储存格的东西合并在一起 但其实E...