blob: 220ed8c77a106a20fa751785c10a6e2e6d552c6c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
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
|