· 7 min read

Scaffolding (Teil 1)

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.

.CellHeading { text-align: center; font-weight: bold; color: #003366} .GroupTitlesIX { font-size: 16pt; color: #003366} .Heading1 { font-size: 18pt; color: #003366 ; font-weight: bold; margin-top: 20px} .Heading2 { font-size: 15pt; font-weight: normal; color: #003366} .Heading3 { font-size: 12pt; font-weight: bold; color: #003366} .Heading4 { font-size: 10pt; font-weight: bold; font-style: italic; color: #003366} .NewHtmlPage { text-align: center; font-size: 18pt; color: #003366 ; font-weight: bold; margin-top: 20px} .TableTitle { text-align: center; font-style: italic; font-weight: bold} .Title { text-align: center; font-size: 18pt; color: #003366; font-weight: bold; margin-top: 20px} .TOC1 { font-size: 13pt; font-weight: bold} .TOC2 { font-size: 11pt} .TOC3 { font-size: 10pt} .TOC4 { font-size: 9pt} .TOC5 { font-size: 8pt}

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

Details zu dem Buch

Back to Blog