Ruby on Rails的“content_for:title”如何获得稍后分配的内容?
简短的问题是:子页面怎么样
设置:title
主要布局的:title
?
细节:
我们可以在应用程序布局application.html.erb
...
我认为yield
返回子页面的内容,例如show.html.erb
,其中包含:
如何:title
以某种方式被高于yield
的东西使用? 我认为首先评估title
部分,然后评估yield
,那么:title
如何追溯设置
标签的内容?
简答:作弊。
答案很长:ActionView重新定义了产量,因此它与我们所知道的产品不同,并且非常喜欢好的ruby。 实际上,模板文件在布局文件之前呈现,然后布局文件中的yield将被已呈现的模板替换。 content_for
块保存在类变量中,因此您可以稍后从布局中访问它们。
我在application_helper.rb
文件中定义了一个帮助方法title
,如下所示:
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
<% title = yield(:title).chop! %> <%= title || 'Default Title' %> <%= title %>