5

Nel mio sistema ho già definito STI. Dog eredita da Animal, nella tabella animals c'è una colonna type con il valore "Dog".Ereditarietà di tabelle singole: come sovrascrivere il valore scritto nel campo tipo

Ora voglio ereditare SpecialDog dal cane, solo per modificare leggermente il comportamento in alcuni casi particolari. I dati sono sempre gli stessi. Ho bisogno di tutte le query eseguite attraverso SpecialDog per restituire i valori nel database che hanno il tipo Dog.

mio problema è che dal momento che ho una colonna type, rotaie aggiunge WHERE "animals"."type" IN ('SpecialDog') alla mia domanda quindi non posso raggiungere le Dog voci originali. Quindi quello che voglio è in qualche modo scavalcare il valore che le rotaie usano quando accede al database attraverso SpecialDog per comportarsi come Dog.

C'è un modo per sovrascrivere l'uso delle guide di valore per la colonna di tipo?

+0

Stai salvando qualche cane come SpecialDog? O tutti i cani sono cani, ma a volte sono speciali? – Frans

+0

Nel database sono sempre 'Dog' – davidrac

risposta

8

In un certo senso sembra una cattiva pratica farlo in questo modo, ma il codice riportato di seguito dovrebbe funzionare il più a lungo possibile.

def self.sti_name 
    "Dog" 
end 

mio altro suggerimento è quello di non avere SpecialDog ereditare da Dog, se possibile.

+0

non funziona più ??? ho lo stesso caso, ruby ​​2.0.0, rails 3.0.10, non è successo usandolo. –