您使用的是軌道capture helper但你的語法是錯誤的。我不知道它爲什麼打印出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
包含值Hello
。
如果改成這樣
<% my_string = "" %>
<% my_string = capture do %> <!-- changed << to = -->
Hello
<% end %>
before <%= my_string %> after
那麼結果是before Hello after
。
那麼這是什麼意思?當你使用<<
時,它會搞砸capture
方法,即使通常你不指望它,它也會渲染捕獲塊內的東西。
基本上,你不能在這裏做你想做的事情,至少不能用你當前的語法。
來源
2012-07-14 00:47:52
Dty
是的,我實際上追加捕獲的返回值到另一個字符串,但我省略了詳細信息,以簡化我的示例。 – Daniel 2012-07-14 00:49:10
你有沒有試過你在rails 3.0.3中發佈的確切的erb? – Dty 2012-07-14 00:50:45
我用一個更好的例子更新了我原來的帖子。是的,我已經嘗試了兩種。 – Daniel 2012-07-14 00:57:29