0

フラッシュ メッセージを表示するために、application_helper にヘルパーを作成しました。このコードは、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

これを実行すると、ページでフラッシュ メッセージを取得する代わりに、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_safeHTML要素として扱うにはmake addする必要があります

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 と html_safe と h から unescape html までのさまざまなオプションを確認できます。あなたが言及したコードは、Rails 2 で書かれている可能性があります。Rails 3 では、html ページに出力される文字列は、デフォルトで HTML エスケープされます。Rails 2 ではhHTML をエスケープするためにヘルパーを使用する必要がありましたが、Rails 3 ではデフォルトでエスケープされます。したがって、エスケープされていない HTML を本当に表示する必要がある場合は、 または のいずれかを使用する必要がありrawます.html_saferawビューとコントローラーからのみ呼び出すことができるため、ヘルパーではhtml_safe.

于 2012-12-14T18:58:23.693 に答える