Migración de Rails DB: ¿Cómo eliminar una tabla?

Resuelto Jason Whitehorn asked hace 14 años • 24 respuestas

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 migrationdeberí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?

Jason Whitehorn avatar Oct 26 '10 08:10 Jason Whitehorn
Aceptado

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
Pete avatar Oct 26 '2010 01:10 Pete

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:migratey luego rake db:rollbackfalla

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
Beder Acosta Borges avatar Jul 27 '2015 15:07 Beder Acosta Borges

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 :productsy raise ActiveRecord::IrreversibleMigration.

Luego corre rake db:migratey dejará caer la mesa por ti.

Brandon O'Rourke avatar Oct 15 '2011 18:10 Brandon O'Rourke