2012-02-20 11 views
27

En Rails, ¿qué es la sintaxis before_filter cuando quiere "exceptuar" el controlador "abc"?sintaxis before_filter cuando quiere "exceptuar" el controlador "abc"

ejemplo, en el application_controller si quiero decir:

before_filter :login_required :except => ["-name of controller-"] 

fondo - Sólo quería autenticación básica en toda la aplicación, excepto el controlador que realmente se encarga de conseguir un usuario autenticado ....

Respuesta

55

usted puede poner la línea siguiente en el controlador donde el before_filter no deberían ser ejecutados:

skip_before_filter :login_required 

incluso se puede specifiy los métodos donde el before_filter se ignora con :only y :except opciones:

skip_before_filter :login_required, :only => [:login] 

Un ejemplo here.


Editar: con carriles 4, before_filter es alias con before_action y skip_before_filter también es alias con skip_before_action

14

La sintaxis es before_filter

before_filter :login_required, :except => ["-name of the action-"] 

echar un vistazo a Rails API Doc.

3

En lugar de usar el nombre del controlador, recomendaría aprovechar el hecho de que los controladores heredan sus filtros de sus padres. Así que lo que recomiendo es algo como esto:

# app/controllers/application_controller.rb 
class ApplicationController 
    # no filters here 
end 

# app/controllers/authenticated_controller.rb 
class AuthenticatedController < ApplicationController 
    before_filter :login_required 
end 

# app/controllers/some_other_controller.rb 
class SomeOtherController < AuthenticatedController 
    # inherits the before_filter from AuthenticatedController 
    # use this for most of your other controllers 
end 

# app/controllers/unauthenticated_controller.rb 
class UnauthenticatedController < ApplicationController 
    # no filters, since this inherits directly from ApplicationController 
    # use this for the controller that you don't want to check login on 
end 

Esto significa que los controladores saben si se supone que deben comprobar inicio de sesión, en lugar de tener una lista (posiblemente frágil) de nombres.

Cuestiones relacionadas