before_filter
before_filter(*filters, &block)
public
Alias for #append_before_filter
: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
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
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
This method isn't deprecated
This method was moved to AbstractController::Callbacks, as stated on [1].
It took me a while to figure out ‘what should I use instead before_filter’. Hope this helps anyone that hits the same road I’m in.
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: