简短的问题是:子页面如何
<% content_for :title do 'Showing product' end %>
为主要布局设置:title
?
细节:
我们可以在应用程序布局application.html.erb
<title><%= content_for :title %>
...
<%= yield %>
我认为yield
会返回子页面的内容,例如来自show.html.erb
的内容,其中包含:
<% content_for :title do 'Showing product' end %>
:title
如何以某种方式被yield
以上的某些东西使用?我认为首先评估title
部分,然后评估yield
,那么:title
如何追溯设置<title>
代码的内容?
答案 0 :(得分:8)
简短回答:作弊。
很长的回答:ActionView重新定义了产量,因此它与我们所知道的产品不同,并且非常喜欢好的'红宝石'。实际上,模板文件在布局文件之前呈现,然后布局文件中的yield将被已呈现的模板替换。 content_for
块保存在类变量中,因此您可以稍后从布局中访问它们。
答案 1 :(得分:5)
我在title
文件中定义了一个帮助方法application_helper.rb
,如下所示:
module ApplicationHelper
def title(page_title)
content_for(:title){ page_title }
page_title
end
end
然后在我的内容ERB文件的顶部,我可以这样做
<% title "Rails Rocks" %>
Other regular content
在application.html.erb
<html>
<head>
<% title = yield(:title).chop! %>
<title><%= title || 'Default Title' %></title>
</head>
<body>
<h1 class="title"><%= title %></h1>
</body>