before_filter
before_filter(*filters, &block)Alias for #append_before_filter
8Notes
:only, :except and passing in multiple parameters
To specify that the filter should be applied to or excluded from given controller actions, use the :only and :except parameters. To pass in multiple controller actions use an array:
before_filter :authorize, :except => [:index, :show] before_filter :authorize, :only => :delete
Multiple filter methods with :only, :except
Notice that this methods accepts *filters param, so you can pass array of methods with :only or :except too ==== Example before_filter [:authorize, :set_locale], :except => :login
multiple filter example
actually you can have it even shorter with: before_filter :authorize, :set_locale, :except => :login
Passing parameters to before_filter
I've found on the net 2 ways to pass parameters to before_filter:
method 1: before_filter do |c| c.class.module_eval do private def custom_filter authorize(args) end end end before_filter :custom_filter
method 2: before_filter do |c| c.send(:authorize, args) end
Re: Passing parameters to before_filter
I am not sure I get your "method 1" alec-c4; won't that define the method each time the before_filter is called? Why not just define the method in the controller?
You can pass parameters or call protected methods with instance_eval:
before_filter :only => :show do |controller|
controller.instance_eval do
redirect_to edit_object_path(params[:id])
end
end
another way
because you can pass inline procs as well:
before_filter {authorize(args)}
logging before filters
If you need to track and log which before filters are called for the purpose of debugging your app/before_filters. Then here's a suggestion, how this could be accomplished:
prepend_before_filter
If you need the method to be called at the beginning of the before_filter chain then you should use:
prepend_before_filter