123456789_123456789_123456789_123456789_123456789_

Class: ActionDispatch::Flash

Relationships & Source Files
Namespace Children
Classes:
Inherits: Object
Defined in: actionpack/lib/action_dispatch/middleware/flash.rb

Overview

The flash provides a way to pass temporary primitive-types (String, ::Array, ::Hash) between actions. Anything you place in the flash will be exposed to the very next action and then cleared out. This is a great way of doing notices and alerts, such as a create action that sets flash[:notice] = "Post successfully created" before redirecting to a display action that can then expose the flash to its template. Actually, that exposure is automatically done.

class PostsController < ActionController::Base
  def create
    # save post
    flash[:notice] = "Post successfully created"
    redirect_to @post
  end

  def show
    # doesn't need to assign the flash notice to the template, that's done automatically
  end
end

show.html.erb
  <% if flash[:notice] %>
    <div class="notice"><%= flash[:notice] %></div>
  <% end %>

Since the notice and alert keys are a common idiom, convenience accessors are available:

flash.alert = "You must be logged in"
flash.notice = "Post successfully created"

This example places a string in the flash. And of course, you can put as many as you like at a time too. If you want to pass non-primitive types, you will have to handle that in your application. Example: To show messages with links, you will have to use sanitize helper.

Just remember: They'll be gone by the time the next action has been performed.

See docs on the FlashHash class for more details about the flash.

Constant Summary

Class Method Summary

Instance Method Summary

Constructor Details

.new(app) ⇒ Flash

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 255

def initialize(app)
  @app = app
end

Instance Method Details

#call(env)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/middleware/flash.rb', line 259

def call(env)
  @app.call(env)
ensure
  session    = Request::Session.find(env) || {}
  flash_hash = env[KEY]

  if flash_hash && (flash_hash.present? || session.key?('flash'))
    session["flash"] = flash_hash.to_session_value
    env[KEY] = flash_hash.dup
  end

  if (!session.respond_to?(:loaded?) || session.loaded?) && # (reset_session uses {}, which doesn't implement #loaded?)
    session.key?('flash') && session['flash'].nil?
    session.delete('flash')
  end
end