0

我在 application_helper 中创建了一个助手来显示我的 Flash 消息。该代码基于我在 Stack Overflow 上找到的代码,并进行了修改:

   def show_flash
     flash_names = [:notice, :warning, :message, :error]
     flash_html = ''
     for name in flash_names
       if flash[name]
         flash_html = flash_html + "<div class=\"#{name}\">#{flash[name]}</div>"
       end
       flash[name] = nil;
     end
     flash_html
   end

当我运行它时,我得到的不是我的页面上的 flash 消息,而是我的 show_flash 助手生成的实际 html,包括所有标记:

      <div class="notice">Item was successfully updated.</div>

我的 application.html.erb 文件如下所示:

 <!DOCTYPE html>
 <html>
 <head>
   <title>My Application</title>
   <%= stylesheet_link_tag    "application" %>
   <%= javascript_include_tag "application" %>
   <%= csrf_meta_tags %>
 </head>
 <body>
<h1 align="center">Welcome to XYZ Application</c></h1>
<%= show_flash %>

 <%= yield %>

 </body>
 </html>

我究竟做错了什么?

4

1 回答 1

1

您需要添加.html_safe以使其视为 HTML 元素

def show_flash
   flash_names = [:notice, :warning, :message, :error]
   flash_html = ''
   for name in flash_names
     if flash[name]
       flash_html = flash_html + "<div class=\"#{name}\">#{flash[name]}</div>"
     end
     flash[name] = nil;
   end
   flash_html.html_safe # added this to make it appear as an HTML element instead of as real string
 end

您可以在这个问题中看到不同的选项,raw vs. html_safe vs. h to unescape html。您提到的代码可能是在 Rails 2 中编写的。在 Rails 3 中,在 html 页面中输出的任何字符串默认都是 HTML 转义的。在 Rails 2 中,我们需要使用hhelper 来转义 HTML,但在 Rails 3 中,它默认是转义的。因此,如果您确实需要显示未转义的 HTML,则需要使用raw.html_safe. raw只能从视图和控制器中调用,因此在帮助程序中,您可以使用html_safe.

于 2012-12-14T18:58:23.693 回答