Vollständige CRUD-Anwendungen mit Streamlined generieren

Viele Rails-Anwendungen benötigen einen administrativen Bereich, der es ermöglicht, mit den Daten des Modells und den Beziehungen zwischen den Daten zu arbeiten. Um sich bei jedem Projekt nicht selbst wiederholen zu müssen, suchen Sie eine Möglichkeit, vollständige CRUD-Anwendungen für jedes neue Projekt zu generieren. Weil dies nur administrative Anwendungen sind, müssen sie nicht besonders hübsch sein, und das Standard-Scaffolding von Rails würde fast reichen, aber eben nur fast. Scaffolding ist wirklich hässlich. Darüber hinaus hilft es einem nicht weiter, wenn man eine Reihe von Tabellen pflegen muss, mit Beziehungen zwischen diesen Tabellen. Gibt es da etwas Besseres?

Verwenden Sie das Streamlined-Framework, um eine flexible administrative Schnittstelle für Ihre Anwendung zu erzeugen.

Beginnen Sie mit dem Download und der Installation des streamlined_generator-Gems:
$ wget http://streamlined.relevancellc.com/streamlined_generator-0.0.4.gem
 
$ sudo gem install streamlined_generator-0.0.4.gem

 
Wir wollen annehmen, dass Sie bereits über ein Datenbankschema verfügen. Zum Beispiel besitzen Sie Tabellen namens galleries und paintings, bei der ein Gemälde zu einer Galerie gehört. Erzeugen Sie (falls das noch nicht geschehen ist) eine Rails-Anwendung:
$ rails art_gallery
 

Dann wechseln Sie in das Anwendungsverzeichnis und generieren eine Streamlined-Anwendung mit Hilfe des Streamlined-Generators:
$ cd art_gallery/
 
$ script/generate streamlined gallery painting
 
Sie übergeben dem Generator alle Modelle, die im resultierenden Streamlined-Interface enthalten sein sollen. Sie können nun Ihre Anwendung starten und mit Ihrem Browser zu /galleries oder /paintings wechseln, um auf Ihre Streamlined-Schnittstelle zuzugreifen.

Was Streamlined gegenüber dem normalen Rails-Scaffolding so leistungsfähig macht, ist die Tatsache, dass es Beziehungen erkennt, die Sie zwischen Ihren Modellen herstellen, und dann Widgets einfügt, mit deren Hilfe Sie diese Beziehungen über die Schnittstelle kontrollieren können.
Um eine 1-zu-M-Beziehung zwischen galleries und paintings herzustellen, fügen Sie Folgendes in Ihre Modellklassen-Definitionen ein:
app/models/gallery.rb:
class Gallery < ActiveRecord::Base

  has_many :paintings
 
end
 

app/models/painting.rb:

class Painting < ActiveRecord::Base

  belongs_to :gallery
 
end
 
Im Entwicklungsmodus sehen Sie die hinzugefügte Spalte sowohl im Gallery- als auch im Painting-View, mit Informationen darüber, in welcher Beziehung ein Modell zum anderen steht.

Diskussion

Viele der Rails-Anwendungen, mit denen Sie arbeiten, brauchen administrative Schnittstellen, wie sie von Streamlined erzeugt werden. Dieser Teil einer Site ist für normale Anwender üblicherweise nicht zugänglich und muss visuell nicht wirklich was hermachen, er muss aber funktionieren. Üblicherweise werden damit grundlegende CRUD-Operationen durchgeführt. Während das Rails-Scaffolding als temporäre Struktur gedacht ist, die Sie letztendlich durch eigenen Code ersetzen, wurde die Streamlined-Schnittstelle so entworfen, dass sie produktionsreifen Code generiert.
<|XrefColor>Abbildung 2-5 zeigt die resultierende Streamlined-Schnittstelle, die die Paintings-Listenansicht ausgibt.

Abbildung 2-5
Eine administrative Streamlined-Schnittstelle für Gemälde und Gallerien

Ein erklärtes Ziel der Streamlined-Entwickler besteht darin, das Standard-Scaffolding von Rails durch robustere, nützlichere und sinnvolle Managementseiten zu ersetzen. Wie Sie sehen können, ist die resultierende Schnittstelle wesentlich ansehnlicher als das Standard-Scaffolding. Sie werden es sicher nicht für die Kundenseite Ihrer Website einsetzen wollen, aber es ist mit Sicherheit gut genug für ein Demo und mehr als ausreichend für eine Management-Schnittstelle. Einige der zur Verfügung stehenden Features sind Links auf alle dem Streamlined-Generator übergebenen Modelle, sortierfähige Spalten, ein Suchfilter und eine Schnittstelle für die Editierung der Beziehungen zwischen Modellobjekten.

Ein anderes Ziel des Projekts besteht darin, die Views der Anwendung mit Hilfe einer deklarativen Syntax anpassen zu können, wobei diese Syntax Active Record ähnelt (z.B. belongs_to :gallery). Um zum Beispiel die Art und Weise zu ändern, wie der Gallery-View die zu ihm gehörenden Gemälde darstellt, würden Sie Folgendes in die GalleryUI-Modelldefinition aufnehmen:
app/streamlined/gallery.rb:

class GalleryUI < Streamlined::UI


 
  # relationship :paintings, :summary => :count # Standard


 
  relationship :paintings, :summary => :list, :fields => [:name]

 
end

module GalleryAdditions


 
end

Gallery.class_eval {include GalleryAdditions}
 
Diese Klasse gibt eine Liste der Gemälde für jede Gallerie unter der Paintings-Spalte aus. Die auskommentierte Deklaration gibt die Gesamtzahl zugehörigen painting-Datensätze einer Spalte aus.

Sie können Operationen in den Prototype-Fenstern editieren und betrachten. Diese Fenster basieren auf Code, der durch die script.aculo.us-Effekt-Bibliothek inspiriert wurde. In diesen Fenstern vorgenommene Änderungen aktualisieren die sie anstoßende Seite per Ajax.
Übergeben Sie die Option –help an den Streamlined-Generator, wenn Sie weitere Informationen zu den Nutzungsoptionen wünschen. Besuchen Sie auch das Streamlined-Wiki (http://wiki.streamlinedframework.org/streamlined/show/HomePage).


Dieses Rezept stammt aus dem Rails Kochbuch, veröffentlicht beim O’Reilly Verlag