2012-02-20 7 views
27

In Rails qual è la sintassi before_filter quando si desidera "eccetto" il controller "abc".sintassi before_filter quando si desidera "eccetto" il controller "abc"

esempio, nel application_controller se voglio dire:

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

Background - Volevo solo l'autenticazione di base su tutto il territorio applicazione, tranne il controller che gestisce in realtà sempre un utente autenticato ....

risposta

55

È possibile inserire la seguente riga nel controller in cui non dovrebbe essere eseguito il before_filter:

skip_before_filter :login_required 

È anche possibile specifiy i metodi in cui il before_filter viene ignorato con :only e :except opzioni:

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

Un esempio here.


Edit: con Rails 4, before_filter è alias con before_action, e skip_before_filter è anche alias con skip_before_action

14

Il before_filter sintassi è

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

avere uno sguardo su Rails API Doc.

3

Invece di utilizzare il nome del controller, consiglierei di sfruttare il fatto che i controllori ereditano i propri filtri dai loro genitori. Allora, cosa mi consiglia è qualcosa di simile:

# 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 

Ciò significa controllori sapere se si suppone per controllare accesso, piuttosto che avere una (possibilmente fragile) elenco di nomi.

Problemi correlati