我有一个rails gem,使用如下代码片段:
components = []
components << label_for(attribute)
components << ...
components << text_field(attribute)
return components.join
Run Code Online (Sandbox Code Playgroud)
这个gem在Rails 3.0.1中工作得很好,但是在更新到Rails 3.0.2之后它会逃脱(在浏览器中呈现为文本)所有HTML.我做错了什么?谢谢.
Mar*_*une 12
正如@ sj26指出的那样,要么使用rails内置助手:
<%= safe_join(components) %>
Run Code Online (Sandbox Code Playgroud)
或者使用我的rails_joingem来让Array#joinhtml安全感知,在这种情况下你的原始代码将按原样运行.
String#join不是 - SafeBuffer意识到.
String#html_safe标记您的字符串已经HTML转义,以防止用户将一些HTML隐藏到您的页面中.看看Yehuda Katz 发表的这篇文章SafeBuffer以及为什么/如何使用它们.
如果你有一个String并且SafeBuffer你想要连接的数组,请确保你已经运行#html_safe它们,或者#concat它们是SafeBuffer这样的:
['<one>', '<p>two</p>'.html_safe].inject ''.html_safe, &:concat
=> "<one><p>two</p>"
Run Code Online (Sandbox Code Playgroud)
Rails有一个内置的帮助程序safe_join,它将为您执行此操作.