Namen und Objekte wurden der Übersichtlichkeit halber vereinfacht. Das Grundkonzept bleibt gleich.Überspringen before_filter in Rails
Ich habe drei Controller: dog
, cat
und horse
. Diese Controller erben alle vom Controller animal
. In der Steuerung animal
, ich habe einen Filter vor, die einen Benutzer als solche authentifiziert:
before_filter :authenticate
def authenticate
authenticate_or_request_with_http_basic do |name, password|
name == "foo" && password == "bar"
end
end
Im show
Wirkung von dog
, ich brauche für alle Benutzer freien Zugang zu haben (die Authentifizierung überspringen).
Wenn ich die Authentifizierung separat für dog
schreiben waren, habe ich so etwas tun könnte:
before_filter :authenticate, :except => :show
Aber da dog
erbt von animal
, ich habe keinen Zugriff auf den Controller-spezifischen Aktionen. Das Hinzufügen von :except => :show
in der animal
-Steuerung wird nicht nur die Authentifizierung für die show
Aktion von dog
, sondern auch die von cat
und horse
überspringen. Dieses Verhalten ist nicht erwünscht.
Wie kann ich die Authentifizierung nur für die show
Aktion von dog
überspringen, während immer noch von animal
erben?
'skip_before_filter' scheint veraltet zu sein >> [http://apidock.com/rails/ActionController/Filters/ClassMethods/skip_before_filter#1083-deprecated-moved](http://apidock.com/rails/ActionController/ Filter/ClassMethods/skip_before_filter # 1083-deprecated-moved) Es wird empfohlen, 'skip_filter' zu verwenden, das' skip_before_filter ', 'skip_after_filter' und' skip_around_filter' alle zusammen aufruft. – Bachet
nein ist nicht .. sie verschieben nur die Methode in eine andere Klasse, http://apidock.com/rails/v3.2.3/AbstractController/Callbacks/ClassMethods/skip_before_filter – Orlando
ja es wurde verschoben –