Tengo un método que hace algo como esto:before_filter con parámetros
before_filter :authenticate_rights, :only => [:show]
def authenticate_rights
project = Project.find(params[:id])
redirect_to signin_path unless project.hidden
end
También quiero utilizar este método en algunos otros controladores, así que copié el método a un ayudante que se incluye en el application_controller.
el problema es que, en algunos controladores, la identificación para el proyecto no es el símbolo :id
sino f.e. :project_id
(y también un :id
está presente (por otro modelo)
¿Cómo resolver este problema? ¿Existe una opción para añadir un parámetro a la acción before_filter (para pasar el parámetro derecha)?
¿hay alguna manera de agregar un símbolo ',: only => [: show]'? Tengo un error al intentar 'before_filter {| c | c.authenticate_rights correct_id_here},: only => [: show] ' – choise
Probar al revés:' before_filter (: only => [: show]) {} '. Más ejemplos aquí: http://apidock.com/rails/ActionController/Filters/ClassMethods/before_filter –
fguillen
Si asegura esto haciendo que el 'before_filter' sea un método privado, entonces quizás vuelva a factorizarlo (por ejemplo, muévalo a un controlador principal, ApplicationController, etc.), necesitará usar 'c.send (: filter_name, ...)' ya que el filtro no se ejecutará en el contexto del controlador. http://guides.rubyonrails.org/action_controller_overview.html#other-ways-to-use-filters –