我有一个非常简单的要求 - 我有一个包含标题和正文的布局。它是页面的子布局,而不是页面本身。
这种布局在多个页面中重复出现,它周围的结构可能会发生变化。所以我希望能够将标题的内容和正文的内容与包含它的结构分开。
我的第一次尝试是使用渲染部分作为布局,使用命名产量来渲染标题和正文:
<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
块和局部渲染之间没有关联。那么我实现这一目标的正确方法是什么?
最佳答案
我只是碰巧有完全相同的问题。
解决办法是:
在您的部分布局文件 'admin/resource' 正文中:
<header class="Resource-header">
<%= yield resource, :resource_header %>
</header>
<div class="Resource-body">
<%= yield resource, :resource_body %>
</div>
在你的模板中做:
<%= render layout: 'admin/resource' do |resource, section| %>
<% case section %>
<% when :resource_header %>
Resource header shows here.
<% when :resource_body %>
Resource body shows here.
<% end %>
<% end %>
关于ruby-on-rails - 渲染具有多个 block 的部分/布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27090607/