Scaffolding (Teil 3)
Scaffolding-Code generieren:
Codegenerierung ist die andere wichtige Form des Scaffolding. Sie generieren das Scaffolding mit dem Befehl ruby script/generate scaffold.
Führen Sie es ohne Parameter aus, um eine Beschreibung des Generators und die von ihm verwendeten Parameter zu erhalten:
Sie müssen den Namen eines Modells und eines Controllers angeben. Um also das Scaffolding für den Controller und die Views unseres Photo-Modells zu generieren, müssen Sie Folgendes eingeben:
Antworten Sie mit y, wenn Sie von Rails gefragt werden, ob Dateien ersetzt werden sollen. Wenn Sie den Namen des Controllers weglassen, verwendet Rails den englischen Plural des Modellnamens. Um also das Scaffolding für slides, slideshows und categories zu generieren, geben Sie Folgendes ein:
Der generierte Code
Sehen wir uns den von Rails erzeugten Controller an. Ihr Code könnte etwas anders aussehen als der hier abgebildete, das Prinzip sollte aber das gleiche sein. Öffnen Sie apps/controllers/photos_controller.rb:
Wie Sie sehen, generiert Rails einen Controller für jede Methode aus Tabelle 4-1. Gehen Sie mit Ihrem Browser auf http://localhost:3000/photos und überprüfen Sie, dass der generierte Code sich genauso verhält wie der durch die scaffold :photo-Methode generierte Code.
Dennoch weicht der Code leicht ab. Statt die Views innerhalb des Controllers zu generieren, wie das die scaffold-Methode tut, enthält der Code explizit gerenderte Views in rhtml-Code. Sehen wir uns einen dieser Views an. Öffnen Sie app/views/photos/list.rhtml:
Dieser View wurde von der list-Methode von PhotosController erzeugt. Sehen wir uns die erste und dritte Zeile genauer an:
Abbildung 4-5 zeigt das Ergebnis. Der View führt alle Eigenschaften eines Photo-Datensatzes in der Datenbank auf. Die Dateinamen-Eigenschaft war von Anfang an in der Datenbank enthalten. Die Eigenschaften Erzeugt am, Thumbnail und Beschreibung wurden bereits in diesem Kapitel mit Hilfe einer Migration eingefügt. Würden wir weitere Eigenschaften hinzufügen, müssten wir im list.rhtml-View keinerlei Änderungen vornehmen, um sie mit auszugeben.
Der show.rhtml-View spiegelt Änderungen in der Datenbank wider. Sehen wir uns nun einen View an, der etwas weniger dynamisch ist. Öffnen Sie app/views/photos/_form. rhtml:
Dies ist ein so genannter partieller View, und er ist für die Ausgabe eines Formulars für ein Photo in edit.rhtml und new.rhtml verantwortlich. (Sie erfahren im nächsten Kapitel mehr über partielle Views.) Die fett gedruckten Wörter sind Attribute von Photo. Weil wir zur Ausgabe des Formulars expliziten Code generiert haben, funktioniert dieser View nur mit Datenbankspalten, die bereits vorhanden waren, als wir das Scaffolding generiert haben. Hier sehen Sie einen der primären Unterschiede zwischen Scaffolding mittels Metaprogrammierung und codegeneriertem Scaffolding. Wenn Sie mit Metaprogrammierung arbeiten, spiegelt das Scaffolding Änderungen in der Datenbank wider, weil unsere scaffold :photo-Methode den Code zur Laufzeit generiert. Mit dem generierten Code erhalten wir durch das Scaffolding einen einmaligen Vorteil, müssen ihn nachfolgend aber auch pflegen.
Das Beste beider Welten
Die meisten Rails-Entwickler nutzen beide Arten des Scaffolding. Die scaffold-Methode ist hilfreich, wenn sich Ihre Active Record-Modelle schnell ändern, weil sie Änderungen an der Datenbank in der Benutzerschnittstelle wiedergibt. Später können Sie das Scaffolding nutzen und Controller und Benutzerschnittstellen mit der Zeit weiter ausbauen, wobei Sie den generierten Code als Grundlage verwenden. Die Kombination dieser beiden Techniken ist eine äußerst leistungsstarke Vorgehensweise.
Scaffolding hat aber auch seine Grenzen. Sie erhalten für jeden Zweck ein und dieselbe Benutzerschnittstelle und einen Controller. Dieser ist nicht für jeden Zweck geeignet und auch nicht vollständig. Eine der größten Schwächen des Scaffolding ist das fehlende Beziehungsmanagement. Das Scaffolding berücksichtigt bei der Codegenerierung keine Beziehungen im existierenden Modell.
Was kommt jetzt?
In diesem Kapitel haben wir Scaffolding für eine einfache Benutzerschnittstelle generiert. Aber der Scaffolding-Code hat seine Grenzen. Er berücksichtigt keine Beziehungen, d.h. Sie können die mit einer Kategorie verknüpften Photos weder sehen noch editieren, ebenso wenig die Dias in einer Diashow. Die Views sind darüber hinaus hässlich und unvollständig. Im nächsten Kapitel wollen wir diesen Problemen abhelfen. Wir verwenden das generierte Scaffolding als Basis und bauen eine umfassendere Benutzerschnittstelle auf. Photo Share entwickelt sich schnell, und so geht es auch weiter.
Dieses Tutorial stammt aus dem Buch “Durchstarten mit Rails” aus dem O’Reilly Verlag.
Details zu dem Buch
Alle drei Teile dieser Scaffolding-Serie steht unseren Leseren auch als PDF zur Verfügung: Downloadlink: Scaffolding_Kap4.pdf
Eingestellt am 07.07.2008 um 07:42
Suchen auf rubyonrails.de
Tags
2.0 ActiveRecord Ajax Authentication Buch Capistrano Controller Enterprise Event Formulare Gewinnspiel Grundlagen IDE irb jQuery Kochbuch Konferenz MySQL OReilly Passenger Phusion Plugin PragProgs Rails Rails 3 Rails 3.1 RailsWayCon Release Release Candidate Routing Ruby RubyGems rubyonrails.de Ryan Bates Scaffolding Screencast Script-Tip Security Test Tools Tutorial Upgrade Video Views WindowsAktuelle Artikel
- Screencast: RABL – Ruby API Builder Language
- Screencast: JSON Dokumente mit Jbuilder erstellen
- Rails 3.2.1 veröffentlicht
- Screencast: Upgrade auf Rails 3.2
- Ruby on Rails 3.2
- Screencast: Private Pub für Realtime-Events
- Screencast: Pretty URLs mit FriendlyId
- Screencast: HTML Emails mit Rails verschicken
- Screencast: Einstieg in die Rails-Entwicklung
- Frohe Weihnachten!
Artikel Archiv
- February 2012
- January 2012
- December 2011
- November 2011
- October 2011
- September 2011
- August 2011
- July 2011
- June 2011
- May 2011
- April 2011
- March 2011
- February 2011
- January 2011
- December 2010
- November 2010
- October 2010
- September 2010
- August 2010
- July 2010
- June 2010
- May 2010
- April 2010
- March 2010
- February 2010
- January 2010
- December 2009
- November 2009
- October 2009
- September 2009
- August 2009
- July 2009
- May 2009
- April 2009
- March 2009
- February 2009
- December 2008
- November 2008
- August 2008
- July 2008
- June 2008
- May 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
Aktuelle Rails Version + Abhängigkeiten:
Gem rails-3.0.0actionmailer (= 3.0.0, runtime)
actionpack (= 3.0.0, runtime)
activerecord (= 3.0.0, runtime)
activeresource (= 3.0.0, runtime)
activesupport (= 3.0.0, runtime)
bundler (~> 1.0.0, runtime)
railties (= 3.0.0, runtime)
Rails auf Rubyforge
Rails auf Github

