Ruby on Rails: Vererbung
Aus Wikibooks
Sagen wir, wir bauen eine Terminverwaltung. Es gibt die abstrakte Basisklasse BusinessDate. Davon werden SingleDate und CompoDate abgeleitet. Wie realisiert man die Datenstrukturen.
Nun Vererbung wir in Rails meistens als Single-Table-Inheritance (kurz STI) realisiert. Die Alternative sind polymorphe Assoziationen.
[Bearbeiten] STI
Für STI legt man eine Tabelle an, die Felder aller Klassen enthält. Normalerweise heist sie so wie die Basisklasse mit Plural-"s", also hier business_dates. Legen wir sie an:
class CreateBusinessDates < ActiveRecord::Migration def self.up create_table :business_dates do |t| t.date :start t.date :end t.string :location t.string :title t.string :short_description t.text :long_description t.integer :color end end def self.down drop_table :business_dates end end
Für die Vererbung brauchen wir noch ein weiteres Feld für den Klassennamen. Es heisst "type" und ist ein String-Feld. Fügen wir es hinzu.
class AddInheritedDates < ActiveRecord::Migration def self.up add_column :business_dates, :type, :string end def self.down remove_column :business_dates, :type end end
Jetzt konnen wir die Klassen definieren.
class BusinessDate < ActiveRecord::Base end class SingleDate < BusinessDate end class CompositeDate < BusinessDate end
Fertig, den Rest übernimmt Rails.
- ergänzen. (Z.B.: Code mit STI-Objecten)
[Bearbeiten] Polymorphe Assoziationen
- Nachteile von STI
- Polymorphe Assoziationen als Alternative
[Bearbeiten] Statt einer Zusammenfassung
Sie haben STI nicht richtig verstanden, wenn ..
- Sie glauben, dass jede abgeleitete Klasse alle Felder benutzen MUSS.
..
- ..
<< .. | Startseite/Inhaltsverzeichnis | .. >>