2010-11-02 67 views
0

我在.html.erb文件下面的代碼如預期,只是工作:如何將HTML從助手傳遞給ERB?

<% if !current_user %> 
    <%= link_to "Sign in (or up)", '/login', :class => "login_button round" %> 
<% else %> 
    <%= link_to "Sign out", '/logout', :class => "login_button round" %> 
<% end if %> 

但我認爲這將是很好堅持條件邏輯到幫助,所以清理的.html .erb文件。我現在有以下,但它不起作用。我的.html.erb:

<%= sign_in_out_button %> 

而且在助手:

def sign_in_out_button 
    out = '' 
    if current_user 
    out << link_to('Sign out', '/logout', :class => 'login_button round') 
    else 
    out << link_to('Sign in (or up)', '/login', :class => 'login_button round') 
    end 
end 

我所得到的,檢查瀏覽器源代碼的時候,正是我要找的,但逃脫這樣它被顯示,而不是被瀏覽器解釋爲代碼。任何想法如何解決這個問題?

回答

1

在rails 3中,輸出代碼默認是轉義的。你可以這樣做:

+0

完美。謝謝。 html_safe是否在這裏引入了任何安全問題(這就是爲什麼代碼被默認轉義)?我應該使用其他方式來做到這一點嗎? – 2010-11-02 06:52:12

+0

當輸出一個字符串變量時,尤其是來自用戶輸入的字符串時,可能會出現一些您不期望的代碼(例如''中的用戶類型)。在這種情況下,如果您使用'html_safe',它將信任所有html代碼,您將會看到警告框!因此,對於那些不認真的人,默認情況下逃離所有代碼可以防止這些類型的攻擊(稱爲XSS,有時可能是嚴重的)。 – PeterWong 2010-11-02 07:31:29

+0

就你的情況而言,你的所有代碼都是由你自己生成的,而不是來自不受信任的用戶,所以你可以不加任何擔心地使用'html_safe'。當你必須爲用戶啓用一些標籤,但你不希望他們使用'