渲染具有多个块的部分/布局

Und*_*ion 5 layout ruby-on-rails view partial ruby-on-rails-4

我有一个非常简单的要求 - 我有一个由标题和正文组成的布局。它是页面的子布局,而不是页面本身。

此布局在多个页面中重复,并且其周围的结构可能会发生变化。所以我希望能够将标头的内容和正文的内容与包含它的结构分开。

我的第一次尝试是使用渲染部分作为布局,使用命名收益来渲染标题和正文:

<header class="Resource-header">
  <%= yield :resource_header %>
</header>
<div class="Resource-body">
  <%= yield :resource_body %>
</div>
Run Code Online (Sandbox Code Playgroud)

然后从我的模板中渲染它,如下所示:

<%= render layout: 'admin/resource' do %>

  <% content_for :resource_header do %>
  <% end %>

  <% content_for :resource_body do %>
  <% end %>

<% end %>
Run Code Online (Sandbox Code Playgroud)

然而,这什么也没有呈现。

我开始研究事情的顺序,发现如果在调用部分之前声明 content_for 块,则这种方法确实有效:

<% content_for :resource_header do %>
<% end %>

<% content_for :resource_body do %>
<% end %>

<%= render layout: 'admin/resource' do %><% end %>
Run Code Online (Sandbox Code Playgroud)

然而,这感觉非常hacky。似乎是全局范围的,并且块和部分渲染content_for之间没有关联。content_for

那么我实现这一目标的正确方法是什么?

sas*_*rov 0

看看 Rails Presenters https://www.ruby-toolbox.com/categories/rails_presenters 也许你的解决方案是 cells gem。