2010-09-16 106 views
1

我在將應用程序移動到Rails 3時遇到了一個大問題。我有一個視圖幫助器,我稱之爲「WidgetHelper」。當我參考它時,它有助於自動呈現某些部分。例如Rails 3部件幫手部分

<%= widget('loginbox', :global => true) %> 

但它不能正常工作。它會根據我的需要呈現HTML代碼,但會轉義返回值,這是不期望的。我怎麼能告訴要渲染(或到)不是爲我轉義返回值?

這裏是我的代碼:

def widget(widget, options={}) 
    begin 
     unless options[:fullpath] 
     render :partial => widget_path(widget, options[:global]) 
     else 
     render "widgets/#{widget}" 
     end 
    rescue ActionView::MissingTemplate 
     "<!-- widget: #{widget.inspect}, #{options.inspect} -->" 
    end 
    end 

回答

3
def widget(widget, options={}) 
    begin 
    unless options[:fullpath] 
     raw render(:partial => widget_path(widget, options[:global])) 
    else 
     raw render("widgets/#{widget}")) 
    end 
    rescue ActionView::MissingTemplate 
    raw "<!-- widget: #{widget.inspect}, #{options.inspect} -->" 
    end 
end 

的Rails 3的raw方法做h方法在Rails的2反向轉義的字符串是使用Rails 2上的h方法完成。在Rails 3上,默認情況下,從視圖輸出的字符串會被轉義,並且可以通過th e raw方法。

+0

謝謝,它運作良好。我爲你和@Jamie Wong添加分數,因爲我在我的應用程序中使用了這兩種解決方案。 – 2010-09-17 10:18:26

+0

在我看來,這似乎有些倒退 - 你什麼時候想要沒有原始的小部件?指定你想要的原料應該是我腦海中定義的一部分,而不是調用。 – 2010-09-17 14:48:33

+0

你是對的傑米。修復即將到來。 – edgerunner 2010-09-17 20:21:58