Einzeltabelle Vererbung: Muss alle Klassen in Hierarchie die gleichen Eigenschaften haben?
-
20-09-2019 - |
Frage
Ich habe die folgenden
class Item < ActiveRecord::Base
end
class Talk < Item
end
mit der Migration
class CreateItems < ActiveRecord::Migration
def self.up
create_table :items do |t|
t.string :type
t.string :name
t.text :description
t.time :start_time
t.time :duration
t.timestamps
end
end
...
end
Standardmäßig ist die Beschreibungseigenschaft für den Artikel- und Talkkurse verfügbar. Gibt es eine Möglichkeit, die Immobilie einzuschränken, damit nur der Talksklasse verfügbar ist?
Lösung
class Item < ActiveRecord::Base
def duration
raise NoMethodError
end
def duration=(value)
raise NoMethodError
end
end
class Talk < Item
def duration
read_attribute(:duration)
end
def duration=(value)
write_attribute(:duration, value)
end
end
Sie könnten das immer tun, aber es ist viel Arbeit umsonst. Was ist das Schlimmste, was passieren wird, wenn Sie eine Dauer auf einem Artikel lesen? Sie werden zurückkommen, was kurz danach einen Absturz verursacht. Sie müssen nicht so besorgt über diese Art von Problemen in Ruby sein.
Bei Bedarf können Sie ein Modul erstellen und das Modul in die beiden Klassen für das gemeinsame Verhalten einbeziehen und den STI fallen lassen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow