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
我所得到的,檢查瀏覽器源代碼的時候,正是我要找的,但逃脫這樣它被顯示,而不是被瀏覽器解釋爲代碼。任何想法如何解決這個問題?
完美。謝謝。 html_safe是否在這裏引入了任何安全問題(這就是爲什麼代碼被默認轉義)?我應該使用其他方式來做到這一點嗎? – 2010-11-02 06:52:12
當輸出一個字符串變量時,尤其是來自用戶輸入的字符串時,可能會出現一些您不期望的代碼(例如''中的用戶類型)。在這種情況下,如果您使用'html_safe',它將信任所有html代碼,您將會看到警告框!因此,對於那些不認真的人,默認情況下逃離所有代碼可以防止這些類型的攻擊(稱爲XSS,有時可能是嚴重的)。 – PeterWong 2010-11-02 07:31:29
就你的情況而言,你的所有代碼都是由你自己生成的,而不是來自不受信任的用戶,所以你可以不加任何擔心地使用'html_safe'。當你必須爲用戶啓用一些標籤,但你不希望他們使用'