Application Helper for Fading Flash Messages
A simple helper method for showing the flash message. Includes optional fade in seconds (view needs javascript_include_tag defaults if you desire fade effect):
def show_flash_message(options={}) html = content_tag(:div, flash.collect{ |key,msg| content_tag(:div, msg, :class => key) }, :id => 'flash-message') if options.key?(:fade) html << content_tag(:script, "setTimeout(\"new Effect.Fade('flash-message');\",#{options[:fade]*1000})", :type => 'text/javascript') end html end
simply call in your views then using:
<%= show_flash_message(:fade => 4) %>
Keeping the flash object on multiple redirects
If your controllers are redirecting more than once, the flash contents will be lost. To avoid it, execute flash.keep before each redirection.
Check ActionController::Flash::FlashHash for more handy methods (discard, now, …)
Broadened Flash helper
Building on the below excellent example, you can create something with default options for how long it’s displayed and how long the fade is, and highlight:
def show_flash(options={}) options = {:fade => 3, :display => 3, :highlight => true}.merge(options) html = content_tag(:div, flash.collect{ |key,msg| content_tag(:div, msg, :class => key, :attributes => "style = display: none;") }, :id => 'flash-message') html << content_tag(:script, "new Effect.Highlight('flash-message');") if options[:highlight] html << content_tag(:script, "$('flash-message').appear();") html << content_tag(:script, "setTimeout(\"$('flash-message').fade({duration: #{options[:fade]}});\", #{options[:display]*1000});") end


