O'Reilly logo

Rails Kochbuch by Rob Orsini

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

First
|
53
Max.
Linie
Max.
Linie
Kapitel 3
KAPITEL 3
Active Record
3.0 Einführung
Active Record ermöglicht einen bequemen, programmatischen Zugriff auf die Domänen-
schicht Ihrer Anwendung. Es handelt sich um einen persistenten Speichermechanismus,
der häufig direkt mit der zugrundeliegenden relationalen Datenbank interagiert. Er basiert
auf einem Entwurfsmuster (und ist auch nach diesem benannt), das von Martin Fowler in
seinem Buch Patterns of Enterprise Application Architecture (Addison-Wesley) definiert
wurde. Fowler fasst das Muster (frei übersetzt) wie folgt zusammen:
Ein Objekt, das eine Zeile einer Datenbanktabelle oder eines Views umschließt, den
Datenbankzugriff kapselt und diese Daten um Domänenlogik erweitert.
Active Record generiert zu diesem Zweck eine objektrelationale Abbildung (object relati-
onal mapping, ORM) zwischen den Ruby-Objekten Ihrer Anwendung und den Zeilen und
Spalten Ihrer Datenbank. Diese Abbildung erlaubt es ihnen, mit der Datenbank wie mit
jedem anderen Ruby-Objekt zu interagieren, d.h. Sie müssen nicht mit SQL arbeiten, um
Ihre Daten bearbeiten zu können. Statt mit den Zeilen einer Datenbank zu arbeiten, besit-
zen Sie Ruby-Objekte, und die Datenbankspalten sind einfach Attribute dieser Objekte,
die Sie mit Hilfe der Ruby-Accessormethoden lesen und schreiben können.
Der Vorteil der Abstrahierung des direkten Zugriffs auf Ihre Datenbank mit Active Record
schließt auch die Möglichkeit ein, die Datenbank zu wechseln, die die eigentlichen Daten
vorhält. Ihre Anwendung ist damit nicht mehr für alle Zeiten an eine Datenbank gebun-
den. Da die Details Ihres Modells in Active Record enthalten sind, ist es ein leichtes von
MySQL auf, sagen wir mal, PostgreSQL oder SQLite zu wechseln.
Ein Domänenmodell besteht aus Daten und einer Reihe von Regeln die beschreiben, wie
diese Daten mit dem Rest Ihrer Anwendung interagieren. Active Record erlaubt es Ihnen,
die Logik Ihres Domänenmodells mittels Ruby zu definieren. Das gibt Ihnen Flexibilität
bei der Definition spezifischer Geschäftsanforderungen an Ihre Daten. Die Zentralisierung
dieser Logik im Modell macht darüber hinaus die Anpassung an geänderte Anforderungen
wesentlich einfacher.
00____RailsKochbuch.book Seite 53 Dienstag, 3. Juli 2007 8:13 08
Max.
Linie
Max.
Linie
54
|
Kapitel 3: Active Record
Links
Active Record basiert, genau wie Rails, auf dem Konzept »Konvention vor Konfiguration«,
um das Setup zu vereinfachen. Zum Beispiel ermittelt Active Record die Felder Ihrer
Datenbank, wodurch die Notwendigkeit der Definition grundlegender Accessoren für
jedes Feld entfällt. Active Record verlässt sich auf Namenskonventionen für Tabellen und
Felder, um Ihr Datenbankschema mit minimalem Konfigurationsaufwand auf Ruby-
Objekte abzubilden. Tabellennamen werden als Plural des in der Tabelle gespeicherten
Objekts erwartet. Eine Tabelle mit Mitarbeiterdaten (engl. employee) wird also employees
genannt. Darüber hinaus wird angenommen, dass jede Tabelle (ausser Link-Tabellen)
einen eindeutigen primären Schlüssel namens
id besitzen. Fremdschlüssel werden nach
den sie referenzierenden Tabellen benannt, gefolgt von
by_id. Zum Beispiel würde eine
students-Tabelle. die eine andere Tabelle namens courses referenziert, eine courses_id-
Spalte enthalten. Linktabellen, die bei M-zu-M-Beziehungen verwendet werden, sind
nach den Tabellen benannt, auf die Sie verweisen, wobei die Tabellennamen in alphabe-
tischer Reihenfolge verwendet werden (z.B. articles_categories).
Active Record bietet darüber hinaus dynamische, Attribut-basierte Finder und eine Reihe
weiterer Helper-Methoden an, die die Arbeit mit der Datenbank einfach und effektiv
machen.
In diesem Kapitel werden viele der Möglichkeiten vorgestellt, mit denen Active Record die
Integration zwischen Ihrer Rails-Anwendung und der sie antreibenden Datenbank verein-
facht.
3.1 Eine relationale Datenbank für den Einsatz
mit Rails einrichten
Problem
Sie haben MySQL oder PostgreSQL installiert und möchten eine relationale Datenbank
einrichten, die Daten über Buchkapitel, die Rezepte in diesen Kapiteln, und Tags, die bei
der Suche nach verwandten Themen in diesen Rezepten helfen, enthält. Diese Datenbank
bildet das Rückgrat Ihrer Rails-Webanwendung. Die Datenbank enthält 1-zu-M- und
M-zu-M-Beziehungen: jedes Kapitel enthält viele Rezepte, aber jedes Rezept kann nur in
einem Kapitel vorliegen. Jedes Rezept kann mehrere Tags besitzen und jeder Tag kann zu
vielen Rezepten gehören.
Lösung
Da Rails mindestens drei verschiedene Laufzeitumgebungen (development, test und pro-
duction) definiert, müssen Sie im ersten Schritt eine Datenbank für jede Umgebung erzeu-
gen.
00____RailsKochbuch.book Seite 54 Dienstag, 3. Juli 2007 8:13 08

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required