2011-05-08 116 views
0

我用foo辅助函数在我看来转义HTML字符:问题与Rails 3的

<%= foo ["hello", "stack", "overflow"] %> 

foo的定义是这样的:

def foo(arr) 
    result = '' 
    arr.each do |a| 
    result += content_tag(:div, a) 
    end 
    result 
end 

页面呈现:

<div>hello</div><div>stack</div><div>overflow</div> 

但是,如果将foo的定义更改为:

def foo(arr) 
    content_tag(:div, arr[0]) + content_tag(:div, arr[1]) + content_tag(:div, arr[2]) 
end 

我得到预期的结果:

hello 
stack 
overflow 

你将如何解决上述foo的定义,以获得预期的结果? (即我不想被转义字符)

回答

2

试试这个:

def foo(arr) 
    result = '' 
    arr.each do |a| 
    result += content_tag(:div, a) 
    end 
    raw result 
end 

编辑。

为了清楚起见,你正在创建一个字符串,Rails不知道它是否安全显示。为了更加精确,Rails毫无疑问地关心它创建的content_tags。

所以,你可以解决你的问题告诉你的轨道初始化字符串是安全的:

def foo(arr) 
    result = ''.html_safe 
    arr.each do |a| 
    result += content_tag(:div, a) 
    end 
    result 
end 
+0

感谢。它解决了这个问题。但是,我仍然想知道为什么需要“生”。你能详细说明一下吗? – 2011-05-08 13:47:14

+0

好吧,让我们来做:) – apneadiving 2011-05-08 14:06:49

+0

现在很清楚!非常感谢!! – 2011-05-08 14:18:35