9.3 Filter 

kap_actioncontroller_filter
Wenn man vor jeder Action oder nach jeder Action eine Reihe von Befehlen ausführen möchte, bietet es sich an, sogenannte Filter zu verwenden.
Es gibt drei verschiedene Filter:
- before_filter:
Werden vor Ausführung der Actions ausgeführt.
- after_filter:
Werden nach Ausführung der Actions ausgeführt.
- around_filter:
Werden vor und nach Ausführung der Actions ausgeführt.
Filtertypen 

before_filter
Am Anfang
Ein Before-Filter wird am Anfang eines Controllers definiert, indem die Methode before_filter aufgerufen und ihr die Methode, die ausgeführt werden soll, übergeben wird:
class DemoController < ApplicationController
before_filter :check
...
protected
def check
...
end
end
Am Ende
Die Methode, die ausgeführt werden soll, wird am Ende des Controllers als private oder als protected deklariert.
Die häufigste Anwendung des Filters before_filter ist die Authentifizierung bzw. die Abfrage, ob ein User authentifiziert ist.
Normalerweise wird nach Abarbeitung des Before-Filters die eigentliche Action, die aufgerufen wurde, ausgeführt. Dem ist nicht so, wenn der Before-Filter einen redirect - oder einen render -Befehl aufruft. Im folgenden Beispiel wird beim Aufruf der Action index nur der Text before filter ausgegeben. Die Action index wird nicht ausgeführt:
class DemoController < ApplicationController
before_filter :check
def index
render :text => "Index wird gerendert"
end
protected
def check
render :text => "before filter"
end
end
Unterschied zu Rails 1.2 |
Vor Rails 2.0 konnte das Ausführen der eigentlich aufgerufenen Action nur verhindert werden, wenn der Before-Filter ein false zurückgeliefert hatte. |
after_filter
Der Filter after_filter wird immer nach Ausführung der Action, die aufgerufen wurde, ausgeführt, bevor das Template an den Browser ausgeliefert wird.Dieser Filter wird eher selten verwendet. Wenn, dann meistens, um etwas zu komprimieren.
around_filter
Der Filter around_filter wird vor und nach Ausführung der aufgerufenen Action ausgeführt.
Der Around-Filter kann z. B. eingesetzt werden, um die Zeit zu messen, wie lange eine Action ausgeführt wird, und/oder zum Logging, wenn etwas protokolliert werden soll:
class DemoController < ApplicationController
around_filter :timing
def index
render :text => "Index wird gerendert"
end
protected
def timing
logger.info("vorher: #{Time.now}")
yield # Aufruf der Action
logger.info("nachher: #{Time.now}")
end
end
# => vorher: Sun Feb 03 21:26:33 +0100 2008
# => nachher: Sun Feb 03 21:26:33 +0100 2008
Filter nur auf bestimmte Actions anwenden 

:except
Mit der Option :except wird der Filter auf alle Actions außer auf die angegebenen angewendet. Mehrere Actions werden als Array übergeben:
# Alle außer index:
before_filter :check, :except=>:index
# Alle außer index und show:
before_filter :check, :except=>[:index, :show]
:only
Mit der Option :only wird der Filter nur auf die angegebenen Actions angewendet. Mehrere Actions werden auch hier als Array übergeben:
# Nur destroy und update:
before_filter :check, :only=>[:destroy, :update]
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.