2010-05-07 102 views
3

我遇到了以下問題:存儲在我想呈現的數據庫中的rhtml(與內部的紅寶石一起嵌入了<%和<%=%>標籤)。該信息通過查詢獲取。我需要能夠評估從數據庫中獲得的信息,就好像它是.erb文件中的正常內容一樣。我目前有:使用erb呈現變量

<% @mymods.each do |mod| %> 
<%= render_text(mod["html"])%> 
<% end %> 

其中mod [「HTML」]是包含RHTML碼變量和@mymods從查詢對象的數組。我目前不知道應該使用什麼函數(render_text當然不起作用)。

幫助是極大的讚賞。

/TZer0

回答

11

可以使用ERB對象呈現文本沒有文本文件之中。
只需將文本傳遞給<%= %>標籤即可。你可以把下面的東西作爲application_helper函數。

def render_erb_text(text, args={}) 
    b = binding 
    template = ERB.new(text, 0, "%<>") 
    template.result(b) 
end 

,然後在模板

<%= render_erb_text("<%= %w(hi how are you).join(' - ') %>")%> 

你也可以考慮繪製文本在你的控制器,你可以處理視圖評估過程中的任何錯誤渲染優於那裏。

看看在ERB documentation瞭解有關變量綁定等詳細信息

我不熟悉如何工作在幕後的細節,但有可能是在運行該代碼的一些嚴重風險壞的或惡意的數據庫數據。如果有的話,應該非常小心地評估用戶輸入或任何未經審查的源代碼的ruby代碼。

+1

感謝您的幫助,這工作。對不起,無法爲此讚揚你。我還沒有15個代表;) – TZer0 2010-05-08 23:48:54