5

In meinem System habe ich STI bereits definiert. Dog erbt von Animal, in der animals Tabelle gibt es eine type Spalte mit dem Wert "Dog".Rails Single Table Vererbung: Wie überschreiben Sie den Wert in das Typfeld geschrieben

Jetzt möchte ich SpecialDog erben von Hund, nur um das Verhalten etwas in einigen speziellen Fall zu ändern. Die Daten sind immer noch gleich. Ich brauche alle Abfragen, die über SpecialDog ausgeführt werden, um die Werte in der Datenbank zurückzugeben, die den Typ Dog haben.

Mein Problem ist, dass, da ich eine type Spalte haben, Schienen WHERE "animals"."type" IN ('SpecialDog') zu meiner Anfrage anfügt, damit ich nicht auf die ursprünglichen Dog Einträge bekommen. Was ich will, ist irgendwie die Wertschienen außer Kraft zu setzen, die verwendet werden, wenn es auf die Datenbank durch SpecialDog zugreift, um sich wie Dog zu verhalten.

Gibt es eine Möglichkeit, die für die Typspalte verwendeten Werteschienen zu überschreiben?

+0

Sparen Sie irgendwelche Hunde als SpecialDog? Oder sind alle Hunde Hund, aber sie sind manchmal besonders? – Frans

+0

In der Datenbank sind sie immer 'Hund' – davidrac

Antwort

8

Es fühlt sich irgendwie wie eine schlechte Praxis an, es auf diese Weise zu tun, aber der untenstehende Code sollte funktionieren, soweit ich das beurteilen kann.

def self.sti_name 
    "Dog" 
end 

Mein anderer Vorschlag ist nicht SpecialDog vererben haben von Dog, wenn möglich.

+0

funktioniert nicht mehr ??? Ich habe den gleichen Fall, Ruby 2.0.0, Schienen 3.0.10, kein Erfolg mit ihm. –

Verwandte Themen