If you append_around_filter A.new, B.new, the filter chain looks like
B#before A#before # run the action A#after B#after
With around filters which yield to the action block, before and after are the code before and after the yield.
# File actionpack/lib/action_controller/filters.rb, line 521 def append_around_filter(*filters, &block) filter_chain.append_filter_to_chain(filters, :around, &block) end
More detailed, working example of usage:
class HomeController < ApplicationController around_filter :action1, :action2 around_filter do |controller, action| logger.info "code block before action" action.call logger.info "code block after action" end def index logger.info "ACTION" end private # filters should not be available for external URL def action1 logger.info "ACTION1 before yield" yield "ACTION1" logger.info "ACTION1 after yield" end def action2 logger.info "ACTION2 before yield" yield "ACTION2" logger.info "ACTION2 after yield" end end
Results (in log file):
ACTION1 before yield ACTION2 before yield code block before action ACTION Rendering home/index code block after action ACTION2 after yield ACTION1 after yield