regresar rails migraciones migracion llaves hacer foraneas eliminar deshacer crear comando columna ruby-on-rails-3 heroku rails-migrations rails-models

ruby-on-rails-3 - migraciones - migracion en rails



¿Cuál es la mejor manera de colocar una mesa y quitar un modelo en Rails 3? (2)

Tengo un modelo y una tabla que ya no necesito en mi aplicación, podría dejarlos allí, pero me gustaría eliminarlos para mantener las cosas ordenadas.

Estoy tratando de descubrir la mejor manera de eliminarlos sin mis archivos migrations & db / schema.rb y cualquier efecto secundario que pueda tener en mi entorno de producción, mi aplicación está en Heroku. Estoy usando PostgreSQL tanto en mi máquina local como en heroku.

Hasta ahora, he encontrado dos formas de hacerlo, pero no estoy seguro de cuál es el mejor método / vía de acceso.

Método 1

Pensé en ir a mi base de datos, dejar caer la mesa y luego destruir el modelo.

rails db DROP TABLE table_name /q rails destroy model model_name

Si hago esto, ¿qué pasará con las migraciones que tengo para este modelo / tabla? Tengo dos migraciones para este modelo, un timestamp_create_modelname y un add_attribute_to_table name.

¿Este método también actualizará el archivo db / schema.rb ?

Cuando presiono la aplicación para Heroku, sospecho que se eliminará el modelo, pero la tabla permanecerá en su lugar, ¿hay un comando heroku para colocar una tabla?

Método dos

Otra forma de leer es generar una nueva migración para soltar la tabla y luego destruir el modelo.

rails generate migration drop_tablename

y luego actualiza el siguiente archivo:

db / migrate / timestamp_drop_tablename (actualizado en respuesta a la respuesta de Dan Wich a continuación)

class DropTablename < ActiveRecord::Migration def up drop_table :tablename end def down create_table :tablename do |t| t.string :table_column t.references :anothertable t.timestamps end add_index :tablenames, :anothertable_id end end

y luego en la terminal:

rake db:migrate rails destroy model model_name rake db:migrate git add . git commit -m "removed table/model_name" git push heroku master heroku run rake db:migrate heroku restart

Este parece ser el mejor método, pero ¿qué ocurre con los archivos de migración anteriores? ¿Permanecerán y actualizarán db / shema cada vez que ejecute rake db: migrar solo para ser reemplazado por db / migrate / timestamp_drop_tablename?

Me complace experimentar con el segundo método, pero me gustaría que alguien con alguien con experiencia lo comparta y me diga las formas de hacerlo.


El segundo método es la forma ideal de manejar esto: sus archivos de migración están destinados a representar cómo su base de datos ha cambiado con el tiempo. Los archivos de migración anteriores permanecerán en su proyecto (en el caso, hipotéticamente, usted quería volver a una versión anterior), pero Rails no los ejecutará cuando rake db:migrate porque sabe que ya se han ejecutado (basado en datos en la tabla schema_migrations de la base de datos).

Su schema.rb se actualizará una vez para reflejar que su base de datos ya no contiene esa tabla.

Un pequeño ajuste a su código: su archivo de migración debería soltar la tabla en el método up , e idealmente recrearlo en el método down . El "arriba" significa que su migración deja caer la tabla para avanzar en el tiempo, y si la migración se retrotrae, se ejecutará el método de down .


Sé que es un viejo tema. La mayoría de las veces, desea eliminar no solo el modelo, sino también las rutas, el controlador y las vistas asociadas con ese modelo. Para hacer eso, ejecuta estos

rails g migration DropYourModel rails destroy scaffold YourModelName

Edite su archivo de migración a drop_table y luego ejecútelo

rake db:migrate

Si el modelo se define en un espacio de nombres, por ejemplo, admins , reemplace el primer comando con

rails destroy scaffold admins/YourModelName