0

我正在使用 Rails 3.0.3 和以下模板(扩展名为 .html.erb):

<% "one"; "two"; capture do %>
    Three
<% end %>

呈现为:

one

为什么是这样?它似乎不应该渲染任何东西,因为我没有使用 <%=

编辑

由于似乎有些混乱,这里有一个更类似于我正在调试的实际模板代码的复制:

<% my_string = "" %>
<% my_string << capture do %>
    Hello
<% end %>
<%= my_string %>

这呈现为:

    Hello    Hello

因为由于某种原因,捕获的输出被附加到 my_string 并被渲染,而不仅仅是前者。

4

1 回答 1

0

您正在使用 rails capture 帮助程序,但您的语法错误。不知道为什么会打印出来one。在 rails 3.4 中它不会打印出任何东西。

这是使用它的正确方法

<% @number = capture do %>
   three
<% end %>

this is some html and here is my <%= @number %>

将呈现的 html 是

this is some html and here is my three

由于您的语法错误,我不会担心为什么会出现“一个”。相反,我会更专注于正确使用捕获助手。


编辑:

您的第二个(已编辑)示例与您的第一个示例不同。这是行号和对最后一行的轻微更改,因此您可以看到发生了什么。

1. <% my_string = "" %>
2. <% my_string << capture do %>
3.     Hello
4. <% end %>
5. before <%= my_string %> after

结果是Hello before Hello after。所以第 3 行被渲染,然后第 5 行被渲染my_string包含 value Hello

如果你把它改成这个

 <% my_string = "" %>
 <% my_string = capture do %>  <!-- changed << to = -->
     Hello
 <% end %>
 before <%= my_string %> after

那么结果就是before Hello after

那么,这意味着什么?当你使用<<它时,它会搞砸capture方法,它会渲染捕获块内的东西,即使通常你不希望它这样做。

基本上,你不能在这里做你想做的事情,至少不能用你当前的语法。

于 2012-07-14T00:47:52.290 回答