2009-12-30 26 views
13

Tengo un montón de modelos de rieles que estoy reescribiendo en un único modelo para simplificar mi código y reducir las tablas innecesarias.rieles eliminar modelos antiguos con migraciones

Me pregunto cuál es la mejor manera de eliminar una clase de modelo y su tabla. Quiero que las migraciones pasadas sigan teniendo éxito, pero no quiero dejar las modelos vacías por ahí. ¿Debo eliminar manualmente las migraciones anteriores que hacen referencia a estos modelos y luego eliminar manualmente los archivos de clase?

¿Alguien tiene algún consejo sobre la mejor manera de hacerlo?

Respuesta

2

¿Qué tal si hacemos ruby script/destroy model? Eso debería encargarse del modelo y la migración.

+0

¿qué ocurre con las migraciones posteriores que agregan datos a este modelo? ¿script/destroy busca las migraciones o simplemente elimina la inicial que creó la tabla? – brad

+1

Las migraciones posteriores necesitarán su propia 'script/destory migration migration_name'. Una buena manera de pensarlo es deshacer el comando genarate. Entonces, no, tampoco buscará otras migraciones que alteren el mismo modelo. – bobbywilson0

+1

a la derecha, entonces la respuesta final a todo esto es que puedo usar script/destroy, pero también necesito editar manualmente cualquier migración que pueda contener referencias a estos modelos eliminados. Muchas gracias – brad

2

Puede echar un vistazo a esto en rails guide. Pero sugiero que, si es posible, debe eliminar los modelos y todas las referencias a los modelos. Esto probablemente ahorrará tiempo más tarde ya que no necesita mantener el código muerto en la base de código.

2

Dependiendo de cuán avanzado está el desarrollo o la producción, puede migrar los modelos de forma segura utilizando una migración para eliminar/respaldar datos o lo que no. A continuación, como se sugiere bobbywilson0, utilizando

script/destroy model 

o si RSpec nada

script/destroy rspec_model 

Esto eliminará cualquier prueba de especificaciones también.

O siempre puede arrastrarlos a la carpeta de la papelera.

15

Si desea deshacerse completamente de la de un modelo y su tabla de hacer esto:

rails destroy model Name 
+7

Esto no generará una migración 'remove_table' sino que eliminará el' create' en su lugar. Entonces, el modelo seguirá estando en 'schema.rb' ... –

6

La pregunta es un poco duro, pero me acaba de hacer:

rails destroy scaffold <ModelName> -p 

El indicador -p muestra resultados "simulados", lo que es bueno para ver qué sucederá. Elimine la marca '-p' y los resultados coincidirán con la salida. Esto limpió toda la colección de archivos M-V-C + archivos de prueba + js + la migración original, no hay problema.

Supongo que si usted es uno de los que le gusta editar manualmente sus migraciones e incluir varios pasos en cada una, la pérdida de la migración original podría romper db: setup, así que tenga cuidado con el comprador. Mantener una acción == un archivo de migración debería evitar esta posible falla.

9

Solución todo en uno.

ejecute los siguientes comandos:

rails destroy model ModelName 
rails g migration DropTableModelName 

El anterior generará un nuevo archivo de migración que hay se ve así:

class DropTableModelName < ActiveRecord::Migration 
    def change 
    drop_table :model_name 
    end 
end 

Ahora ejecute db:migrate y ya está.

0

Si prefieres tener una respuesta basada en el manual:

Primero ejecute el siguiente comando para identificar qué migraciones que desea eliminar:

rake db:migrate:status 

No dude en grep -i en él también si estás seguro de su esquema de nombres.

Tome nota de todos los "agregar x al nombre del modelo" y alteraciones similares a su modelo. Estos se pueden eliminar usando:

rails d migration AddXToModelName 

Haga esto para cada migración además de la migración de creación inicial. El siguiente comando se ocupará de la migración de creación inicial y de los archivos asociados con el modelo:

rails d model ModelName 
Cuestiones relacionadas