Digamos que tengo un objeto FireNinja < Ninja
en mi base de datos, almacenado usando herencia de tabla única. Más tarde, me doy cuenta de que realmente es un WaterNinja < Ninja
. ¿Cuál es la forma más limpia de cambiarlo a la subclase diferente? Mejor aún, me gustaría crear un nuevo objeto WaterNinja
y simplemente reemplazar el viejo FireNinja
en el DB, preservando la ID.Cambiar una clase de un objeto en ActiveRecord
Editar que sabe cómo crear el nuevo objeto de mi WaterNinja
existente FireNinja
, y también sé que puedo borrar el viejo y guardar una nueva melodía. Lo que me gustaría hacer es mutar la clase del elemento existente. Ya sea que haga eso creando un nuevo objeto y haciendo algo de magia ActiveRecord para reemplazar la fila, o haciendo algún tipo de cosa loca con el objeto mismo, o incluso eliminándolo y reinsertándolo con la misma identificación, es parte de la pregunta.
Parece que estás respondiendo, "¿cómo convierto todas las' FireNinjas' a 'WaterNinjas'?" La respuesta aún funciona aunque cambie la condición a 'ID = myid'. Sí, había pensado en eso.También tendría que sacar el objeto después de la actualización para hacer algunos ajustes de campo específicos de WaterNinja, pero está bien. Esperaba algo un poco más limpio, sin embargo. –
Veo lo que quieres decir. No recomiendo hacer esto, pero esto hará el truco: 'ninja_id = @ ninja.id; @ ninja.update_attribute (: type, 'WaterNinja'); @ninja = WaterNinja.find (ninja_id) ' –
Editado para mostrar el método que describí. –