【发布时间】:2015-01-21 07:48:24
【问题描述】:
我有一个非常简单的要求 - 我有一个包含标题和正文的布局。它是页面的子布局,而不是页面本身。
这种布局在多个页面中重复出现,并且它周围的结构可能会发生变化。所以我希望能够将 header 的内容和 body 的内容从包含它的结构中分离出来。
我的第一次尝试是使用渲染部分作为布局,使用命名的 yield 来渲染标题和正文:
<header class="Resource-header">
<%= yield :resource_header %>
</header>
<div class="Resource-body">
<%= yield :resource_body %>
</div>
然后像这样从我的模板中渲染它:
<%= render layout: 'admin/resource' do %>
<% content_for :resource_header do %>
<% end %>
<% content_for :resource_body do %>
<% end %>
<% end %>
但是,这不会渲染任何内容。
我开始玩弄事物的顺序,发现如果 content_for 块在调用部分之前声明,这种方法确实有效:
<% content_for :resource_header do %>
<% end %>
<% content_for :resource_body do %>
<% end %>
<%= render layout: 'admin/resource' do %><% end %>
然而,这只是感觉令人难以置信的hacky。看来content_for是全局作用域的,content_for块和部分渲染没有关联。
那么我实现这一目标的正确方法是什么?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 layout view partial