¿Cómo excluir una sola acción de controlador de un filtro en Rails 3.07?

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :check_session_expiry, :except => :login

¿Cómo se excluye un soltero la acción de inicio de sesión del controlador (el controlador de los usuarios, por ejemplo)?

preguntado el 27 de agosto de 11 a las 22:08

3 Respuestas

Primero, no estoy en una máquina con rieles para probarlo, pero lo siguiente debería funcionar:

class UserController < ApplicationController
  skip_filter :check_session_expiry, :only => :foo

  # following is DEPRECATED as far as I know
  #skip_before_filter :check_session_expiry, :only => :foo

  def foo
  end
end

Respondido 28 ago 11, 03:08

class ApplicationController < ActionController::Base
  before_filter :check_session_expiry


  def check_session_expiry
     return true if self.class != UsersController && self.action == "login"
     # do your thing
  end

Respondido 28 ago 11, 03:08

Simplemente redefiniría check_session_expiry en su controlador para que sea un método vacío.

  class UserController < ...
    ...
    private
    def check_session_expire
      # optional if other actions shall still use the filter
      super unless self.action == 'login'
    end
  end

Respondido 28 ago 11, 03:08

Pero, ¿qué pasa con las otras acciones del controlador? El filtro que no funcionó para esos. OP solo quiere omitir el filtro para una sola acción. - Deradon

Lo siento, pensé que quería que le quitaran el filtro por completo. - ayckoster

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.