Предположим, у меня есть объект FireNinja < Ninja
в моей базе данных, который хранится с использованием одностраничного наследования. Позже я понимаю, что он действительно WaterNinja < Ninja
. Какой самый чистый способ изменить его на другой подкласс? Еще лучше, мне бы хотелось создать новый объект WaterNinja
и просто заменить старый FireNinja
в БД, сохранив идентификатор.Изменение класса объекта в ActiveRecord
Редактировать Я знаю, как создать новый объект WaterNinja
из моего существующего FireNinja
, и я также знаю, что могу удалить старый и сохранить новый. То, что я хотел бы сделать, это mutate класс существующего элемента. Я делаю это, создавая новый объект и делая магию ActiveRecord для замены строки или делая какую-то сумасшедшую вещь для самого объекта или даже удаляя ее и повторно вставляя с тем же идентификатором, хотя это часть вопроса.
Похоже, вы отвечаете: «Как мне преобразовать все« FireNinjas »в« WaterNinjas »?» Ответ по-прежнему работает, хотя если я изменю условие на 'ID = myid'. Да, я подумал об этом.Мне также пришлось бы вытащить объект после обновления, чтобы установить некоторые настройки поля WaterNinja, но это нормально. Однако я надеялся на что-то более чистое. –
Я понимаю, что вы имеете в виду. Я не рекомендую это делать, но это сделает трюк: 'ninja_id = @ ninja.id; @ ninja.update_attribute (: type, 'WaterNinja'); @ninja = WaterNinja.find (ninja_id) ' –
Отредактировано, чтобы показать метод, который я описал. –