在ERB呈现的布局中嵌套each循环不会迭代任何元素



我有一个通用的子布局,在我的应用程序的许多页面上使用。为了渲染它,我使用render layout: ...,然后将视图的其余部分放在块中:

<%= render layout: 'layouts/content-box', locals: { header: 'Foo' } do %>
  <% @posts.each do |post| %>
    <%= post.inspect %>
  <% end %>
<% end %>

这将产生一个空模板,实际上循环根本不迭代。这在过去是可行的,但是我们现在正在从HAML:

= render layout: 'layouts/content-box', locals: { header: 'Foo' } do
  - @posts.each do |post|
    = post.inspect

我认为我发布的HAML是等同的,但显然不是。如果我把循环移出render块,它就能工作了。数组已经存在并已填充。我做错了什么?我也尝试过使用<%- @posts.each %>(注意连字符)。

哎呀,这是因为我试图渲染的布局仍然是一个HAML文件。一旦我将其转换为ERB,一切都如预期的那样工作。

最新更新