before_filter with parameters before_filter with parameters ruby-on-rails ruby-on-rails

before_filter with parameters


I'd do it like this:

before_filter { |c| c.authenticate_rights correct_id_here }def authenticate_rights(project_id)  project = Project.find(project_id)  redirect_to signin_path unless project.hiddenend

Where correct_id_here is the relevant id to access a Project.


With some syntactic sugar:

before_filter -> { find_campaign params[:id] }, only: [:show, :edit, :update, :destroy]

Or if you decide to get even more fancy:

before_filter ->(param=params[:id]) { find_campaign param }, only: %i|show edit update destroy|

And since Rails 4 before_action, a synonym to before_filter, was introduced, so it can be written as:

before_action ->(param=params[:id]) { find_campaign param }, only: %i|show edit update destroy|

NB

-> stands for lambda, called lambda literal, introduce in Ruby 1.9

%i will create an array of symbols


To continue @alex' answer, if you want to :except or :only some methods, here is the syntax:

before_filter :only => [:edit, :update, :destroy] do |c| c.authenticate_rights params[:id] end 

Found here.