2013-12-17 35 views
5

考虑以下几点:如何从ERB代码块产生而不呈现它?

view.html.erb

<%= make_backwards do %> 
    stressed 
<% end %> 

helper.rb

def make_backwards 
    yield.reverse 
end 

视图呈现stresseddesserts,而不是仅仅desserts。如何在不呈现代码块的情况下使用yield中的内容?

回答

3

ERB有一个内部缓冲区,这使得使用块有点复杂,就像你在代码示例中看到的那样。

Rails提供了一个capture方法,该方法允许您在此缓冲区中捕获一个字符串并从一个块中返回它。

所以你的助手将成为以下:

def make_backwards 
    capture do 
    yield.reverse 
    end 
end 
+0

只是为别人在这个未来非常有用的,嵌入产生块在另一个字符串:'“

\n#{capture {yield} }\n
”' – starfry

0

你可以尝试做FF:

选项1:

<%= make_backwards { "stressed" } %> 

选项2:

<%= make_backwards do %> 
    <% "stressed" %> 
<% end %> 

让我知道,如果它帮助。