Scaffolding (Teil 1)

Seit Jahrhunderten hilft das Gerüst (engl. scaffolding) Baumeistern während der frühen Bauphasen, indem es den Zugang zum Bau ermöglicht und die Konstruktion stützt. Auch Programmierer verwenden temporären Scaffolding-Code, um Struktur zu verleihen und das System zu unterstützen, bis ausgereifterer Code zur Verfügung steht. Rails automatisiert das Scaffolding, um die frühe Codierungsphase produktiver zu machen als jemals zuvor.

In nahezu jeder Ruby on Rails-Demo von fünf oder mehr Minuten Länge werden Sie sehr wahrscheinlich dem Scaffolding begegnen. Rails-Gegner lehnen dieses Feature mit der Begründung ab, dass jeglicher Scaffolding-Code wieder verworfen wird, so dass die Vorteile nur künstlicher Natur seien. In gewisser Weise haben die Gegner recht. Scaffolding-Benutzerschnittstellen sind hässlich und unvollständig. Aber das Scaffolding bietet mehr als nur billige Demoeffekte. Hier einige Vorteile:

    • Sie können Code sehr schnell generieren, um von Ihren Benutzern Feedback zu erhalten.
    • Sie sind durch schnelle Erfolge motiviert.
    • Sie können lernen, wie Rails funktioniert, indem Sie sich den generierten Code ansehen.
    • Sie können das Scaffolding als Grundlage nutzen, um Ihre Entwicklung voranzutreiben.
    • Sie können Metaprogrammierung nutzen, die sich automatisch anpasst, wenn sich die Struktur der Datenbank ändert.

In diesem Kapitel zeigen wir, wie man das Scaffolding zum Aufbau einer einfachen Benutzerschnittstelle für Photo Share nutzt. In späteren Kapiteln werden wir diese Grundlage erweitern, um unsere Anwendung weiter auszugestalten.

Die Scaffold-Methode

Wir haben bereits ein funktionierendes Modell für Photo Share vorgestellt, einschließlich Photos, Kategorien, Diashows und Dias, und wir sind in der Lage, das Schema über Active Record-Objekte innerhalb der Rails-Konsole zu verwalten. Der nächste Schritt besteht darin, das Scaffolding zu nutzen, um einfache Web-Benutzerschnittstellen für diese Klassen aufzubauen. Scaffolding bringt Sie auf Ihrem Weg ein gutes Stück weiter, generiert aber keine vollständige Anwendung. Aber das ist in Ordnung, schließlich suchen wir einen Anfang und keine vollständige Anwendung in Produktionsqualität.

Eine Liste von Photos

Beginnen wir damit, den Benutzer eine Liste von Photos über das Web verwalten zu lassen. Stellen Sie sicher, dass Sie über eine Datenbank verfügen, dass diese konfiguriert ist und dass Sie über Tabellen mit Modellobjekten für Dias, Diashows, Kategorien und Photos verfügen.1 Wenn Ihr Server nicht läuft, starten Sie ihn wie üblich über ruby script/server. Besuchen Sie mit Ihrem Browser http://localhost:3000/, um sicherzustellen, dass die Dinge funktionieren. Sie sehen die Rails-Willkommensseite, wenn alles richtig funktioniert. Nutzen wir nun das Scaffolding.

Wir bauen unsere »Gerüste« mit Hilfe der scaffold-Methode auf. Diese Methode gehört zum Controller, weshalb wir einen Controller namens Photos anlegen müssen:

ruby script/generate controller Photos

Fügen Sie die scaffold :photo-Methode wie folgt in photo_controller.rb ein:

class PhotosController < ApplicationController

  scaffold :photo
end

Das war’s schon – Rails erledigt den Rest. Laden Sie nun die URL http://localhost:3000/photos, um sich das Scaffolding in Aktion anzusehen. Sie sehen eine Liste mit Photos, zusammen mit Links zum Anlegen neuer Photos, zum Editieren existierender Photos und zur Präsentation der vorhandenen Photos. Mit der einfachen Anweisung scaffold :photo erhalten Sie alle Seiten, die in Abbildung 4-1 aufgeführt sind. Das Scaffolding generiert überraschend vollständigen Controller- und View-Code. Um eins klarzustellen: Das Scaffolding erzeugt keinen produktionsfähigen Code, bietet aber einen guten Ausgangspunkt. Der nächste Abschnitt zeigt, wie das Scaffolding funktioniert.

Wenn Sie beim Zugriff auf die Anwendung die folgende Fehlermeldung erhalten, dann haben Sie den Server nicht neu gestartet:
Mysql::Error in Photo#list
Access denied for user: ‚root@localhost‘ (Using password: NO)

Abbildung 4-1
Scaffolding generiert alle vier Views

Mehr Metaprogrammierung

scaffold :photo erledigt die ganze Arbeit. scaffold ist eine Methode von ActionController.2 :photo ist ein Symbol, das das Active Record-Modell festlegt, das Rails für dieses Scaffolding benutzt. Wenn Sie diese Methode angeben, fügt Rails Ihrem Controller die neun Methoden aus Tabelle 4-1 hinzu. Vier dieser Methoden geben Views aus. Zusammen bilden diese Methoden eine einfache CRUD-Schnittstelle für Ihr Active Record-Modell (basierend auf dem Objektmodell). Innerhalb des Modells enthält das @@content_columns-Attribut Informationen zu jeder Spalte der Datenbank.

Tabelle 4-1

Die scaffold :target-Methode eines Rails-Controllers erzeugt die folgenden Methoden im Controller 

Methoden

Aufgabe

View

index

Generiert eine Willkommensseite. Standardmäßig wird index auf die list-Controller-Aktion umgeleitet. Standardmäßig ruft Rails auch die index-Aktion auf, wenn der Benutzer einen Controller angibt, aber keine Aktion.

Nein
list

Generiert einen View mit einer paginierten Liste von ziel-Objekten, wobei das Ziel-Objekt das Modellobjekt für das Scaffolding ist.

Ja
create(ziel)

Erzeugt und speichert ein Active Record-Objekt aus dem Ziel-Objekt.

Nein
new

Generiert einen View, um ein neues Controller-Objekt zu erzeugen.

Ja
edit(id)

Generiert einen View, um das Ziel-Objekt mit der angegebenen id zu editieren.

Ja
update(id)

Aktualisiert das Active Record-Ziel-Objekt mit der angegebenen id.

Nein
show(id)

Generiert einen View, um ein Objekt auszugeben.

Ja
destroy(id)

Zerstört das Objekt vom Typ ziel mit der angegebenen id.

Nein
render_scaffold

Generiert einen Standard-View für die View-Methoden, wenn kein .rhtml-View vorhanden ist.

N/A

Die meisten der Methoden aus Tabelle 4-1 rufen letztendlich die render_scaffold-Methode auf, die überprüft, ob Sie den entsprechenden View hinzugefügt haben. (Denken Sie daran, dass Rails-Views standardmäßig den gleichen Namen besitzen wie die Controller-Methode.) Ist das der Fall, verwendet Rails Ihre Views. Andernfalls stellt der Controller Standard-Views zur Verfügung.

Dieses Tutorial stammt aus dem Buch „Durchstarten mit Rails“ aus dem O’Reilly Verlag.

Details zu dem Buch

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

This site uses Akismet to reduce spam. Learn how your comment data is processed.