Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort des Fachgutachters
Einleitung
1 Einführung
2 Installation
3 Erste Schritte
4 Einführung in Ruby
5 Eine einfache Bookmarkverwaltung
6 Test-Driven Development
7 Rails-Projekte erstellen
8 Templatesystem mit ActionView
9 Steuerzentrale mit ActionController
10 Datenbankzugriff mit ActiveRecord
11 E-Mails verwalten mit ActionMailer
12 Nützliche Helfer mit ActiveSupport
13 Ajax on Rails
14 RESTful Rails und Webservices
15 Rails mit Plug-ins erweitern
16 Performancesteigerung
17 Sicherheit
18 Veröffentlichen einer Rails-Applikation auf einem Server
Ihre Meinung?

Spacer
 <<   zurück
Ruby on Rails 2 von Hussein Morsy, Tanja Otto
Das Entwickler-Handbuch
Buch: Ruby on Rails 2

Ruby on Rails 2
geb., mit DVD
699 S., 39,90 Euro
Rheinwerk Computing
ISBN 978-3-89842-779-1
Online bestellenPrint-Version jetzt bestellen
* versandkostenfrei in (D) und (A)
Pfeil 10 Datenbankzugriff mit ActiveRecord
  Pfeil 10.1 Einführung
  Pfeil 10.2 Eine ActiveRecord-Model-Klasse generieren
  Pfeil 10.3 Rake-Tasks zum Verwalten von Datenbanken
  Pfeil 10.4 Getter- und Setter-Methoden
  Pfeil 10.5 Erstellen, bearbeiten und löschen
  Pfeil 10.6 Suchen
  Pfeil 10.7 Datenbankschema und Migrations
  Pfeil 10.8 Migration-Skripte
  Pfeil 10.9 Migration-Befehle im Detail
  Pfeil 10.10 Assoziationen
  Pfeil 10.11 Validierung
  Pfeil 10.12 Statistische Berechnungen
  Pfeil 10.13 Callbacks
  Pfeil 10.14 Vererbung


Rheinwerk Computing - Zum Seitenanfang

10.2 Eine ActiveRecord-Model-Klasse generieren  Zur nächsten ÜberschriftZur vorigen Überschrift

Im letzten Beispiel haben wir sowohl die Tabelle als auch die ActiveRecord-Model-Klasse manuell erstellt. Dies ist aber nicht der typische Rails-Weg (auf Schienen). Typisch ist es, einen Generator zu verwenden, der sowohl die Model-Klasse generiert als auch eine sogenannte Migration-Datei, mit der die Tabellenstruktur in Ruby definiert wird. Je nach verwendetem Generator kann zusätzlich auch ein Controller mit den passenden Views generiert werden.

Die Vorgehensweise ist wie folgt:

  1. Generieren des Model
    Es werden u. a. die Model-Klasse und eine Migration-Datei zur Erstellung der Datenbanktabelle generiert.
  2. Definition der Tabellenstruktur in der Migration
  3. Migration ausführen, damit die Tabelle generiert wird

Generatoren

Folgende Generatoren eignen sich zum Erzeugen eines Models:

  1. Model
    Dieser Generator erstellt neben der Model-Klasse im Verzeichnis app/models mit den zugehörigen Tests in test/unit und Testdaten im Verzeichnis test/fixtures auch eine Migration-Datei für die Erstellung der Datenbank-Tabelle. Als Parameter geben Sie den Namen des Models im Singular an. Optional können Sie auch schon die Felder mit den dazugehörigen Datentypen angeben:
    ruby script/generate model Guest firstname:string \
         lastname:string

    Alle folgenden Generatoren basieren auf dem Model-Generator.

  2. Resource
    Diesen Generator können Sie nutzen, um eine Ressource zu erzeugen. Es werden ein leeres Model, ein leerer Controller sowie die Unit und Functional Testklassen und die Fixtures generiert. Der dazugehörige Routing-Eintrag (map.resources) in der Datei config/routes.rb wird auch vorgenommen (siehe Kapitel 14). Der Generator resource erstellt keine Methoden im Controller und auch nicht die dazugehörigen Views. Das übernimmt der scaffold-Generator. Als Parameter erwartet der resource-Generator den Namen des Models im Singular und eine optionale Liste von Spaltenname: sql_type-Paaren. Werden diese angegeben, werden die entsprechenden Felder in der Migration angelegt. Die Felder created_at und updated_at werden automatisch erzeugt.

    ruby script/generate resource person name:string
  3. Scaffold
    Dieser Generator erstellt alle erforderlichen Dateien mit allen erforderlichen Inhalten, um sofort eine Ressource nutzen zu können. Es werden das Model, die Migration-Datei, der Controller mit den CRUD"-Actions (Create, Read, Update, Delete), die dazugehörigen Views und die Testklassen generiert. Der für die Ressource erforderliche Routing-Eintrag (map.resources) in der Datei config/routes.rb wird auch automatisch vorgenommen. Als erster Parameter wird der Name des Models erwartet. Optional können Sie eine Liste von Spaltenname:sql_type -Paaren übergeben. Werden diese angegeben, werden die entsprechenden Felder in der Migration-Datei angelegt. Die Felder created_at und updated_at werden automatisch erzeugt.

    ruby script/generate scaffold post title:string \
         nachricht:text

Allen Generatoren ist gemeinsam, dass sie auch Test-Code erstellen.


Rheinwerk Computing - Zum Seitenanfang

Generieren eines Models mit dem Model-Generator  topZur vorigen Überschrift

script/generate

Das Generator-Skript generate liegt im Ordner script und wird mit den Pflichtparametern Generator (z. B. model) und einem Namen (z. B. client) aufgerufen. Optional können Sie noch Argumente wie zum Beispiel die Feldnamen und Typen sowie Optionen wie zum Beispiel -f für »force« (überschreibt bereits vorhandene Dateien) übergeben:

ruby script/generate model client

exists  app/models/
     create  test/unit/
     exists  test/fixtures/
     create  app/models/client.rb
     create  test/unit/client_test.rb
     create  test/fixtures/clients.yml
     exists  db/migrate
     create  db/migrate/002_create_clients.rb

Folgende Dateien wurden generiert:

  1. Model-Klasse client.rb
    class Client < ActiveRecord::Base
    end
  2. Migration 002_create_clients.rb
    class CreateClients < ActiveRecord::Migration
      def self.up
        create_table :clients do |t|
          t.timestamps
        end
      end
    
      def self.down
        drop_table :clients
      end
    end
  3. Fixture clients.yml
    # one:
    #   column: value
    #
    # two:
    #   column: value
  4. Unit-Test-Klasse client_test.rb
    require File.dirname(__FILE__) + '/../test_helper'
    class ClientTest < Test::Unit::TestCase
      # Replace this with your real tests.
      def test_truth
        assert true
      end
    end

Migration

Die Model-Klasse können wir zunächst so belassen. In der Migration-Datei legen wir die Tabellenstruktur für die Tabelle fest. Wenn Sie die Feldnamen und deren Datentypen beim Generieren des Models mit übergeben haben, hat der Generator bereits für Sie die Tabellenstruktur in der Migration-Datei angelegt. Die Spaltendefinition für die ID wird nicht angegeben, da sie automatisch von Rails erstellt wird.

Weitere Details zu Migration siehe Abschnitt »Datenbankschema und Migrations« in diesem Kapitel.

class CreateClients < ActiveRecord::Migration
  def self.up
    create_table :clients do |t|
      t.string :firstname
      t.string :lastname
      t.date :birthday
      t.boolean :active, :default => true

      t.timestamps
    end
  end

  def self.down
    drop_table :clients
  end
end

rake db:migrate

Mit dem folgenden Befehl wird die Migration ausgeführt. Das bedeutet, dass der Ruby-Code in einen SQL-Befehl umgewandelt und ausgeührt wird, um die entsprechende Tabelle zu generieren:

rake db:migrate
== 2 CreateClients: migrating ========================
-- create_table(:clients)
   -> 0.0037s
== 2 CreateClients: migrated (0.0039s) ===============

Test in der Konsole

In der Konsole kann das eben erstellte Model getestet werden:

ruby script/console

>> Client.count
=> 0
>> Client.create(:firstname=>"William", :lastname=>"Adama")
=> ...
>> Client.count
=> 1
>> william = Client.find(1)
=> ...
>> william.firstname
=> "William"
>> william.birthday
=> nil
>> william.active
=> true
>> william.created_at
=> Fri Jan 25 07:49:20 +0100 2008

Interessant ist die letzte Ausgabe. Das Attribut created_at und updated_at wurde automatisch gesetzt (dazu später mehr).



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
 <<   zurück
  Zum Katalog
Zum Katalog: Ruby on Rails 2
Ruby on Rails 2
Jetzt bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Ruby on Rails 3.1






 Ruby on Rails 3.1


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Suchmaschinen-Optimierung






 Suchmaschinen-
 Optimierung


Zum Katalog: JavaScript






 JavaScript


Zum Katalog: Schrödinger lernt HTML5, CSS3 und JavaScript






 Schrödinger lernt
 HTML5, CSS3
 und JavaScript


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de