views:

110

answers:

1

Now that Rails 3 escapes all evaluated elements in views (good), but it is also escaping my flash message. And I like the occasional link in my flash message (or strong or emphasis).

A flash message:

flash[:notice] = "<strong>Bob</strong> was sucessfully checked in.<br />If you made a mistake, you can <a href=\"/scouts/#{@scout.id}/check_out\">check out Bob</a> to undo."

Becomes garbled, escaped, unusable.

I can unescape the message using raw:

- flash.each do |name, msg|
  = content_tag :div, raw(msg)

But now every flash message is unescaped.

How can I unescape just a singe flash message? or just parts of the message?

A: 

try html_safe in your controller for each notice you want escaped. This will allow you to remove the raw function from the view and unescape only the ones you want in the controller.

flash[:notice] = "test<br/>test".html_safe
cowboycoded
Perfect. Thanks. This also helped: http://yehudakatz.com/2010/02/01/safebuffers-and-rails-3-0/
Karl