Ruby on Rails: Vererbung
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 wird in Rails meistens als Single-Table-Inheritance (kurz STI) realisiert. Die Alternative sind polymorphe Assoziationen.
STI
BearbeitenFür STI legt man eine Tabelle an, die Felder aller Klassen enthält. Normalerweise heißt 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 heißt "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 können 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)
Polymorphe Assoziationen
Bearbeiten- Nachteile von STI
- Polymorphe Assoziationen als Alternative
Statt einer Zusammenfassung
BearbeitenSie haben STI nicht richtig verstanden, wenn ..
- Sie glauben, dass jede abgeleitete Klasse alle Felder benutzen MUSS.
..
- ..
<< .. | Startseite/Inhaltsverzeichnis | .. >>