3

可以说我有这个部分我正在尝试渲染

#layouts/_subheader.html.erb
<div class="subheader">
   <%= yield %>
   <%= yield :filters %>
</div>

当我在这样的视图中使用这个部分时

<%= render 'layouts/sub_header' do %>
   <h2> Content For Yield </h2>
   <% content_for :filters do %>
      <h2> Content for Filters </h2>
   <%  end %>
<% end %>

我得到的 HTML 输出为

<div class="subheader">
   <h2> Content For Yield </h2>
   <h2> Content for Filters </h2>
</div>

这可以按预期工作,但是当我更改yield部分标签的顺序时会出现问题

而不是上面的,如果我将部分重写为

#layouts/_subheader.html.erb
<div class="subheader">
   <%= yield :filters %>
   <%= yield %>
</div>

我得到的输出为

<div class="subheader">
   <h2> Content For Yield </h2>
</div>

没有content_for :filters被渲染。

我在这里做错了什么?这是正确的行为还是我做错了什么?

如果我必须让内容的内容yield :filters出现在平原之前我该怎么办yield

编辑:-

我努力了

#layouts/_subheader.html.erb
<div class="subheader">
   <%= content_for :filters %>
   <%= yield %>
</div>

但它似乎也不起作用。

4

1 回答 1

0

感谢reddit和@Ezhil上的所有人,我找到了解决方案,这就是我所做的

我所做的是我将content_for捕获组放在渲染之前,就像这样

#index.html.erb
<% content_for :filters do %>      
  <h2> Content for Filters </h2> 
<% end %> 

<%= render 'layouts/sub_header' do %>   
  <h2> Content For Yield </h2> 
<% end %>

在我的部分

#layouts/_subheader.html.erb 
<div class="subheader">     
   <%= content_for :filters %>     
   <%= yield %>
</div>

这是因为该块直到第一次 yield 才执行,所以在运行之前没有捕获任何内容。

于 2020-07-20T07:19:23.443 回答