db045dbbf6
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
65 lines
2.4 KiB
Ruby
65 lines
2.4 KiB
Ruby
module ActionController #:nodoc:
|
|
# The flash provides a way to pass temporary objects 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 <tt>flash["notice"] = "Succesfully created"</tt> before redirecting to a display action that can then expose
|
|
# the flash to its template. Actually, that exposure is automatically done. Example:
|
|
#
|
|
# class WeblogController < ActionController::Base
|
|
# def create
|
|
# # save post
|
|
# flash["notice"] = "Succesfully created post"
|
|
# redirect_to :action => "display", :params => { "id" => post.id }
|
|
# end
|
|
#
|
|
# def display
|
|
# # doesn't need to assign the flash notice to the template, that's done automatically
|
|
# end
|
|
# end
|
|
#
|
|
# display.rhtml
|
|
# <% if @flash["notice"] %><div class="notice"><%= @flash["notice"] %></div><% end %>
|
|
#
|
|
# This example just places a string in the flash, but you can put any object in there. And of course, you can put as many
|
|
# as you like at a time too. Just remember: They'll be gone by the time the next action has been performed.
|
|
module Flash
|
|
def self.append_features(base) #:nodoc:
|
|
super
|
|
base.before_filter(:fire_flash)
|
|
base.after_filter(:clear_flash)
|
|
end
|
|
|
|
protected
|
|
# Access the contents of the flash. Use <tt>flash["notice"]</tt> to read a notice you put there or
|
|
# <tt>flash["notice"] = "hello"</tt> to put a new one.
|
|
def flash #:doc:
|
|
if @session["flash"].nil?
|
|
@session["flash"] = {}
|
|
@session["flashes"] ||= 0
|
|
end
|
|
@session["flash"]
|
|
end
|
|
|
|
# Can be called by any action that would like to keep the current content of the flash around for one more action.
|
|
def keep_flash #:doc:
|
|
@session["flashes"] = 0
|
|
end
|
|
|
|
private
|
|
# Records that the contents of @session["flash"] was flashed to the action
|
|
def fire_flash
|
|
if @session["flash"]
|
|
@session["flashes"] += 1 unless @session["flash"].empty?
|
|
@assigns["flash"] = @session["flash"]
|
|
else
|
|
@assigns["flash"] = {}
|
|
end
|
|
end
|
|
|
|
def clear_flash
|
|
if @session["flash"] && (@session["flashes"].nil? || @session["flashes"] >= 1)
|
|
@session["flash"] = {}
|
|
@session["flashes"] = 0
|
|
end
|
|
end
|
|
end
|
|
end |