假设我有这个部分,我正在尝试渲染
#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>
这是因为直到第一次屈服时才执行块,所以在运行之前不会捕获任何内容。