Załóżmy, że mam obiekt FireNinja < Ninja
w mojej bazie danych, przechowywany przy użyciu dziedziczenia pojedynczej tabeli. Później zdaję sobie sprawę, że naprawdę jest WaterNinja < Ninja
. Jaki jest najczystszy sposób, aby zmienić go na inną podklasę? Nawet lepiej, chciałbym stworzyć nowy obiekt WaterNinja
i po prostu zamienić stary FireNinja
w DB, zachowując ID.Zmiana klasy obiektu w ActiveRecord
Edit wiem jak utworzyć nową WaterNinja
obiektu z mojego istniejącego FireNinja
, i wiem też mogę usunąć starą i zapisać nowy. To, co chciałbym zrobić, to zmutować klasę istniejącego przedmiotu. Czy to robię, tworząc nowy obiekt i wykonując trochę magii ActiveRecord, aby zastąpić wiersz, lub robiąc coś w rodzaju szaleństwa do samego obiektu, lub nawet usuwając go i wstawiając z tym samym identyfikatorem jest częścią tego pytania.
Wygląda na to, że odpowiadasz: "jak mogę przekonwertować wszystkie" FireNinjas "na" WaterNinjas "? Odpowiedź nadal działa, jeśli zmienię warunek na "ID = myid". Tak, myślałem o tym.Musiałbym również wyciągnąć obiekt po aktualizacji, aby wykonać pewne ustawienie pola specyficzne dla WaterNinja, ale to w porządku. Miałem jednak nadzieję na coś nieco czystszego. –
Widzę, co masz na myśli. Nie polecam tego, ale to zadziała: 'ninja_id = @ ninja.id; @ ninja.update_attribute (: type, "WaterNinja"); @ninja = WaterNinja.find (ninja_id) ' –
Edytowane, aby pokazać opisaną przeze mnie metodę. –