ruby - before - rails query params
¿Cómo aplicar before_filter a cada acción de cada controlador en Rails 3.2.11? (4)
Colóquelo en ApplicationController
y herede todos los demás controladores de él. Si no sobrescribe verify_logged_in
en uno de sus subcontroladores, simplemente funciona.
Me gustaría verificar si el usuario ha iniciado sesión en cada solicitud al servidor.
Algo como:
:before_filter verify_logged_in
¿Dónde debería colocar ese before_filter para que se aplique a todas las acciones del controlador y todas las solicitudes?
El controlador de aplicaciones es la clase base de todas las demás clases.
Si coloca cualquier filtro en esta clase, el flujo funciona de la siguiente manera:
Si tocas url decir del recurso de los users
con cualquier acción decir acción de index
, entonces:
El control primero va al Application Controller
. Allí comprueba si hay filtros, si encuentra alguno, ejecuta el método de filtro y luego va a la acción de índice del controlador de usuarios.
Controlador de aplicación:
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :verify_logged_in
end
Otro controlador:
class UsersController < ApplicationController
def index
end
Aquí, en el código anterior, verá que el otro controlador hereda el contenido del controlador principal que es el controlador de la aplicación. Entonces, si coloca before_filter
en el controlador de la aplicación, para cada usuario verificará si el usuario ha iniciado sesión para cada solicitud.
Para asegurarse de que los filtros se apliquen a todas las acciones, colóquelo en el application_controller.rb.
poner before_filter en la clase base (en el archivo application_controller.rb), funcionará en base y todas sus clases derivadas, como
class ApplicationController < ActionController::Base
before_filter :set_locale
def set_locale
I18n.locale = params[:locale] or I18n.default_locale
end
end
buena suerte :-)