2011-05-08 97 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