我有以下网页home.html.erb
:
<% provide(:title, 'Home') %>
<h1>Sample App</h1>
<p>
This is the home page for the
<a href="http://railstutorial.org/">Ruby on Rails Tutorial</a>
sample application.
</p>
我有以下布局application.html.erb
<!DOCTYPE html>
<html>
<head>
<title><%= full_title(yield(:title)) %></title>
...
</head>
<body>
<%= yield %>
</body>
</html>
full_title()
是一个函数,用于检查是否有作为参数传递的标题。如果有,它会将其放入HTML中。如果没有给出参数,它将在HTML中放置一个基本标题。
我假设通过application.html.erb
开始跟踪,然后在到达<%= yield %>
时,它会将home.html.erb
的内容嵌入到application.html.erb
的该位置,从而产生在以下文件中:
<!DOCTYPE html>
<html>
<head>
<title><%= full_title(yield(:title)) %></title>
...
</head>
<body>
<% provide(:title, 'Home') %>
<h1>Sample App</h1>
<p>
This is the home page for the
<a href="http://railstutorial.org/">Ruby on Rails Tutorial</a>
sample application.
</p>
</body>
</html>
在第4行<%= full_title(yield(:title)) %>
中,{Home}肯定会传递值“Home”,但代码:title
在几行之后才会传递。 Rails是否会倒退才能实现这一目标?这是怎么回事?
答案 0 :(得分:1)
不,不是。这是一种字符串插值,每次调用provide(:title,...)
后都会替换此值答案 1 :(得分:0)
我的理解是在应用程序布局之前处理home.html.erb。换句话说,视图和帮助程序已准备好并且已插入&#39;在整个事情完成之前到应用程序布局。我想&#34;倒退&#34;取决于你看它/它的实际工作方式。我还在学习,但它不一定是从上到下的。关于代码在页面上的布局方式的顺序。