9 Steuerzentrale mit ActionController
Der Controller stellt die Zentrale einer Rails-Applikation dar. Zusammen mit ActionView bildet ActionController das Modul ActionPack.
Steuerzentrale
Beim Model-View-Controller-Entwurfsmuster nimmt der Controller eine zentrale Rolle ein. Den Controller kann man sich im Prinzip als Steuerzentrale vorstellen, die die Interaktion des Benutzers mit der Rails-Applikation steuert. Ein Benutzer kann hier auch eine andere Applikation sein, die z. B. eine Anfrage per XML an unsere Rails-Applikation stellt.
Abbildung Model-View-Controller-Entwurfsmuster
9.1 Grundlagen 

Eine Rails-Applikation enthält in der Regel mehrere Controller. Oft sind Controller für die Operationen auf ein Model zuständig. Der Flights-Controller aus unserer Beispielapplikation railsair ist z. B. für die Verwaltung des Flight -Models zuständig.
Aufgaben
Ein Controller hat u. a. folgende Aufgaben:
- Daten aus HTTP-Anfragen empfangen (z. B. Formulardaten)
- Datenbankabfragen über Model-Klassen
- Setzen und Abfragen von Cookies
- Setzen und Abfragen von Sessions
- Templates aufrufen
- Setzen von Flash-Nachrichten
- Weiterleitungen
- Senden von Dateien und Daten
- Authentifizierung
Im Verlaufe des Buches haben Sie schon einige Male mit Controllern gearbeitet. Im Rahmen dieses Kapitels wollen wir auf Details rund um ActionController eingehen. Wenn Sie noch nicht so viel Erfahrung mit Rails haben, ist es vor dem Durcharbeiten dieses Kapitels unbedingt empfehlenswert, unsere Beispielapplikation »Eine einfache Bookmarkverwaltung« aus dem gleichnamigen Kapitel durchzuarbeiten.
Application- Controller
Controller sind Klassen, die von einem übergeordneten Controller, dem Application-Controller, erben. Der Application-Controller wiederum erbt von der Klasse ActionController::Base und wird beim Generieren einer Rails-Applikation im Verzeichnis app/controllers erstellt.
Listing app/controllers/application.rb
...
class ApplicationController < ActionController::Base
helper :all # include all helpers, all the time
...
end
Vererbung
Durch die Vererbung stehen allen Controllern einer Rails-Applikation alle Methoden, die im Application-Controller definiert werden, und die Methoden der Klasse ActionController::Base zur Verfügung. Die Vererbung wird in nachfolgendem Diagramm durch die unausgefüllten Pfeile dargestellt.
Abbildung Controller-Klassen-Hierarchie
Die meisten Controller einer Rails-Applikation verwenden als Elternklasse die Klasse ApplicationController.
Listing app/controllers/flights_controller.rb
class FlightsController < ApplicationController
...
end
Das heißt, im Application-Controller können Sie Hilfsmethoden definieren, auf die alle Controller der Applikation zugreifen können sollten. Diese Methoden werden üblicherweise als protected deklariert, damit sie nicht von außen aufrufbar sind.
Actions
Die Methoden innerhalb eines Controllers werden als Actions bezeichnet. Es sind nur die Actions von außen aufrufbar, die nicht private oder protected sind.
Nachdem das Routing (siehe Abschnitt »Routing« in diesem Kapitel) entschieden hat, welcher Controller und welche Action für eine Anfrage zuständig sind, nimmt der Controller die Anfrage an und leitet sie an die zuständige Action weiter.
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.