5

W moim systemie mam już zdefiniowane STI. Dog dziedziczy po Animal, w tabeli animals znajduje się kolumna type o wartości "Dog".Dziedziczenie pojedynczego stołu w Railsach: Jak przesłonić wartość zapisaną w polu typu

Teraz chcę, abyodziedziczył po psie, aby zmodyfikować zachowanie nieznacznie w niektórych szczególnych przypadkach. Dane są wciąż takie same. Potrzebuję wszystkich kwerend, które są uruchamiane przez SpecialDog, aby zwrócić wartości w bazie danych, które mają typ Dog.

Mój problem polega na tym, że ponieważ mam kolumnę type, szyny dołączają WHERE "animals"."type" IN ('SpecialDog') do mojego zapytania, więc nie mogę dostać się do oryginalnych wpisów Dog. Tak, czego chcę, to w jakiś sposób przesłonić wartości używane przez szyny wartości, gdy uzyskuje dostęp do bazy danych poprzez SpecialDog, aby zachowywać się jak Dog.

Czy istnieje sposób na przesłonięcie korzystania z szyn wartości dla kolumny typu?

+0

Czy zapisujesz jakieś psy jako SpecialDog? Czy wszystkie psy są psami, ale czasami są wyjątkowe? – Frans

+0

W bazie danych są one zawsze "Dog" – davidrac

Odpowiedz

8

To jest jak zła praktyka, aby zrobić to w ten sposób, ale poniższy kod powinien działać tak daleko, jak to możliwe.

def self.sti_name 
    "Dog" 
end 

Moja druga propozycja jest nie mieć SpecialDog Dziedzicz Dog, jeśli to możliwe.

+0

nie działa już ??? Mam taką samą sprawę, ruby ​​2.0.0, szyny 3.0.10, bez powodzenia z jej użyciem. –

Powiązane problemy