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 Buch 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.13 CallbackstopZur vorigen Überschrift

ActiveRecord bietet einen sehr hohen Komfort, indem zu jeder Model-Klasse Methoden zum Hinzufügen, Ändern, Löschen usw. automatisch zur Verfügung gestellt werden. Man muss lediglich eine Tabelle (über eine Migration) erstellen und gegebenenfalls ein paar Deklarationen für Assoziationen in der entsprechenden Model-Klasse definieren.

Beispiele

In einigen Anwendungsfällen reicht es nicht aus, dass bei Aufruf der Methode destroy nur der entsprechende Datensatz gelöscht wird. Bei einer Produkt-Tabelle, in der Produktbilder und PDF-Broschüren nicht in der Datenbank, sondern als Dateien abgelegt sind, wäre es sinnvoll, dass der Aufruf der destroy -Methode nicht nur den entsprechenden Datensatz, sondern auch die zugehörigen Dateien löscht.

Anstatt jedoch eine eigene destroy -Methode zu implementieren, können sogenannte Callbacks definiert werden. Mittels Callbacks können Sie ActiveRecord anweisen, Ihren eigenen Code vor oder nach Ausführung von bestimmten Befehlen, wie speichern, löschen usw., auszuführen. In unserem Beispiel können wir einen Callback erstellen, der nach dem Löschen des Datensatzes mit destroy die zugehörigen Dateien löscht.

class Product < ActiveRecord::Base
  after_destroy  :delete_pdf_files

  private

  def delete_pdf_files
    # Lösche Dateie
    FileUtils.rm(pdf_path)
  end
end

In dem Beispiel wird nach jedem Aufruf der destroy -Methode die Methode delete_pdf_files aufgerufen.

Datensatz nicht löschen

Im folgenden Beispiel soll beim Aufruf der Methode destroy nicht der Datensatz aus der Datenbank entfernt werden, sondern nur ein Feld gesetzt werden, das den Datensatz als gelöscht markiert. Dies ist z. B. bei Daten sinnvoll, die für Recherche-Zwecke immer verfügbar sein müssen.

Zum Markieren wird ein Feld deleted_at verwendet, das die aktuelle Uhrzeit und das aktuelle Datum zum Zeitpunkt des Löschens enthält. Ist das Feld leer, so wurde der Datensatz nicht gelöscht.

class Flight < ActiveRecord::Base
  before_destroy :mark_as_deleted
  ...

  private

  def mark_as_deleted
    # setze deleted_at auf die aktuelle Uhrzeit und Datum
    update_attribute(:deleted_at, Time.now)
    # ist Rückgabewert false, bricht Ausführung
    # der destroy-Methode ab.
    return false
  end
end

:conditions

Um alle Datensätze, die nicht als gelöscht markiert sind, abzufragen, muss in der find -Methode eine entsprechende Bedingung (:conditions) angegeben werden.

Liste von Callbacks

Methoden

In der folgenden Liste werden die verschiedenen Callback-Methoden aufgeführt.

  • before_validation
    Callback wird vor einer Validierung ausgeführt.
  • after_validation
    Callback wird nach einer Validierung ausgeführt.
  • before_validation_on_create
    Callback wird vor einer Validierung eines neuen Datensatzes ausgeführt.
  • after_validation_on_create
    Callback wird nach einer Validierung eines neuen Datensatzes ausgeführt.
  • before_save
    Callback wird vor dem Speichern ausgeführt.
  • after_save
    Callback wird nach dem Speichern ausgeführt.
  • before_create
    Callback wird vor Ausführung der create -Methode ausgeführt.
  • after_create
    Callback wird nach Ausführung der create-Methode ausgeführt.
Markieren eines gelöschten Datensatzes mit einem Plug-in
Für diesen Zweck kann auch das Plug-in acts_as_paranoid eingesetzt werden, das auch ein Feld deleted_at zur Markierung gelöschter Datensätze verwendet. Die Installation erfolgt mit folgendem Befehl:
script/plugin install http://railsbuch.de/urls/30

In der Model-Klasse muss nur die Methode acts_as_paranoid aufgerufen werden. Es muss kein eigener Callback definiert werden.

class Flight < ActiveRecord::Base
  acts_as_paranoid
end

Die zugehörige Tabelle benötigt ein Feld deleted_at . Das Plug-in hat die Methoden find und count so angepasst, dass nur die nicht gelöschten (markierten) Datensätze einbezogen werden. Außerdem stellt das Plug-in die Methoden find_with_deleted und count_with_deleted zur Verfügung, bei denen die als gelöscht markierten Datensätze einbezogen werden.



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

 <<   zurück
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Ruby on Rails 2
Ruby on Rails 2
Jetzt Buch bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: Ruby on Rails 3.1






 Ruby on Rails 3.1


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Suchmaschinen-Optimierung






 Suchmaschinen-
 Optimierung


Zum Rheinwerk-Shop: JavaScript






 JavaScript


Zum Rheinwerk-Shop: Schrödinger lernt HTML5, CSS3 und JavaScript






 Schrödinger lernt
 HTML5, CSS3
 und JavaScript


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
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.


Nutzungsbestimmungen | Datenschutz | Impressum

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

Cookie-Einstellungen ändern