Rails yield和content_for的wieird行为,"yield:filter"只有在



假设我有这个部分,我正在尝试渲染

#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>

则不呈现CCD_ 2。

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

如果必须使yield :filters的内容出现在普通yield之前,该怎么办

编辑:-

我试过

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

但它似乎没有那么好用。

感谢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>

这是因为直到第一次屈服时才执行块,所以在运行之前不会捕获任何内容。

最新更新