Migración de Rails DB: ¿Cómo eliminar una tabla?
Agregué una tabla que pensé que iba a necesitar, pero ahora ya no planeo usarla. ¿Cómo debo quitar esa tabla?
Ya ejecuté migraciones, por lo que la tabla está en mi base de datos. Supongo que rails generate migration
debería poder manejar esto, pero aún no he descubierto cómo.
He intentado:
rails generate migration drop_tablename
pero eso solo generó una migración vacía.
¿Cuál es la forma "oficial" de eliminar una tabla en Rails?
No siempre podrás simplemente generar la migración para tener ya el código que deseas. Puede crear una migración vacía y luego completarla con el código que necesita.
Puede encontrar información sobre cómo realizar diferentes tareas en una migración aquí:
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Más específicamente, puede ver cómo eliminar una tabla utilizando el siguiente enfoque:
drop_table :table_name
Escribe tu migración manualmente. Por ejemplo, correr rails g migration DropUsers
.
En cuanto al código de migración, solo voy a citar la publicación Rails Migration Checklist de Maxwell Holder.
MALO: se ejecuta rake db:migrate
y luego rake db:rollback
falla
class DropUsers < ActiveRecord::Migration
def change
drop_table :users
end
end
BUENO: revela la intención de que la migración no sea reversible
class DropUsers < ActiveRecord::Migration
def up
drop_table :users
end
def down
fail ActiveRecord::IrreversibleMigration
end
end
MEJOR: en realidad es reversible
class DropUsers < ActiveRecord::Migration
def change
drop_table :users do |t|
t.string :email, null: false
t.timestamps null: false
end
end
end
Primero genere una migración vacía con el nombre que desee. Es importante hacerlo de esta manera ya que crea la fecha adecuada.
rails generate migration DropProductsTable
Esto generará un archivo .rb en /db/migrate/ como 20111015185025_drop_products_table.rb
Ahora edite ese archivo para que se vea así:
class DropProductsTable < ActiveRecord::Migration
def up
drop_table :products
end
def down
raise ActiveRecord::IrreversibleMigration
end
end
Lo único que agregué fue drop_table :products
y raise ActiveRecord::IrreversibleMigration
.
Luego corre rake db:migrate
y dejará caer la mesa por ti.