variable restful rails method generate and ruby-on-rails routing before-filter

ruby-on-rails - restful - rake routes



: excepto que no funciona en before_filter en el controlador de la aplicaciĆ³n. Problema de enrutamiento? (1)

Tengo un before_filter en mi controlador de aplicación para mantener viva la sesión de un usuario (y cerrarla si se ha agotado el tiempo de espera). Esto debe invocarse en cada acción, excepto / sessions / new y / sessions / destroy, que se enrutan como / login y / logout.

Las partes relevantes de mi controlador de aplicación se ven así;

class ApplicationController < ActionController::Base before_filter :update_activity_time, :except => [:login, :logout] private def update_activity_time if current_user time_out = current_user.setting.remember_me ? 20160 : current_user.setting.user_timeout from_now = time_out.minutes.from_now end if session[:expires_at].blank? session[:expires_at] = from_now else time_left = (session[:expires_at].utc - Time.now.utc).to_i if time_left <= 0 session_expiry else session[:expires_at] = from_now end end end def session_expiry reset_session flash[:notice] = ''Your session has expired. Please log back in.'' unless request.xhr? session[:return_to] = request.request_uri redirect_to login_url else session[:return_to] = request.referer render :js => "window.location.replace(/"#{login_url}/")" end end end

y my routes.rb contiene lo siguiente;

map.login "login", :controller => "sessions", :action => "new" map.logout "logout", :controller => "sessions", :action => "destroy"

Se está llamando al before_filter cuando se visitan / login o / logout. Esto no es un show-stopper, pero causa algunos comportamientos extraños (por ejemplo, al cerrar la sesión desde una página que ha expirado).

¿Alguna idea de lo que estoy haciendo mal? Estoy usando Rails 2.3.10.


La opción :except toma nombres de acción, no partes de url. Esto es lo que debe hacer en su lugar:

class ApplicationController < ActionController::Base before_filter :update_activity_time ... end

Luego, en sessions_controller.rb :

class SessionsController < ApplicationController skip_before_filter :update_activity_time, :only => [:new, :destroy] ... end

No desea colocar el :except en ApplicationController porque, si lo hiciera, las acciones new y de destroy para cada uno de los controladores de su aplicación no actualizarían el tiempo de actividad.