method

before_filter

before_filter(*filters, &block)
public

8Notes

:only, :except and passing in multiple parameters

edavey · Jul 23, 200810 thanks

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

Vidmantas · Jul 31, 20088 thanks

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

ronald · Mar 27, 20094 thanks

actually you can have it even shorter with: before_filter :authorize, :set_locale, :except => :login

Passing parameters to before_filter

alec-c4 · Sep 29, 20091 thank

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

abriening · Oct 16, 20091 thank

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

phaedryx · Nov 22, 2010

because you can pass inline procs as well:

before_filter {authorize(args)}

logging before filters

tpo · Apr 14, 2011

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:

http://stackoverflow.com/questions/4951902/how-to-log-rails-controller-filters-during-rspec-controller-tests/5660475#5660475

prepend_before_filter

joshuapinter · Feb 8, 2015

If you need the method to be called at the beginning of the before_filter chain then you should use:

prepend_before_filter