· 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)
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.
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.