I have a method that does something like this:
before_filter :authenticate_rights, :only => [:show]
def authenticate_rights
project = Project.find(params[:id])
redirect_to signin_path unless project.hidden
end
I also want to use this method in some other Controllers, so i copied the method to a helper that is included in the application_controller.
the problem is, that in some controllers, the id for the project isn't the :id
symbol but f.e. :project_id
(and also a :id
is present (for another model)
How would you solve this problem? is there an option to add a parameter to the before_filter action (to pass the right param)?
I'd do it like this:
Where
correct_id_here
is the relevant id to access aProject
.I find the block method using curly braces instead of
do...end
to be the clearest optionbefore_action
is just the newer preferred syntax forbefore_filter
With some syntactic sugar:
Or if you decide to get even more fancy:
And since Rails 4
before_action
, a synonym tobefore_filter
, was introduced, so it can be written as:NB
->
stands forlambda
, called lambda literal, introduce in Ruby 1.9%i
will create an array of symbolsThis should work:
This should return
params[:project_id]
if it is present in the params hash, or returnparams[:id]
if it isn't.To continue @alex' answer, if you want to
:except
or:only
some methods, here is the syntax:Found here.