Rails DB Migration – ¿Cómo eliminar una tabla?

Añadí una tabla que pensé que iba a necesitar, pero ahora ya no planeo usarla. ¿Cómo debo eliminar esa tabla?

Ya he ejecutado migraciones, por lo que la tabla está en mi base de datos. Me imagino que los rails generate migration deberían ser capaces de manejar esto, pero aún no sé cómo.

He intentado:
rails generate migration drop_tablename ,
pero eso acaba de generar una migración vacía.

¿Cuál es la forma “oficial” de dejar caer una mesa en Rails?

No siempre podrá simplemente generar la migración para que ya tenga el código que desea. Puede crear una migración vacía y 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 colocar una tabla usando el siguiente enfoque:

 drop_table :table_name 

Primero genere una migración vacía con el nombre que desee. Es importante hacerlo de esta manera ya que crea la fecha apropiada.

 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 .

A continuación, ejecute rake db:migrate y abandonará la tabla por usted.

Escribe tu migración manualmente. Por ejemplo, ejecutar rails g migration DropUsers .

En cuanto al código de la migración, voy a citar la lista de verificación de migración de Rails post de Maxwell Holder

MALO: ejecutar rake db:migrate y luego rake db:rollback fallará

 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 - es realmente reversible

 class DropUsers < ActiveRecord::Migration def change drop_table :users do |t| t.string :email, null: false t.timestamps null: false end end end 

Si bien las respuestas proporcionadas aquí funcionan correctamente, quería algo un poco más ‘directo’, lo encontré aquí: enlace Primero entrar en la consola de Rails:

 $rails console 

Entonces solo escribe:

 ActiveRecord::Migration.drop_table(:table_name) 

¡Y listo, funcionó para mí!

Necesita crear un nuevo archivo de migración usando el siguiente comando

 rails generate migration drop_table_xyz 

y escriba el código drop_table en el archivo de migración recién generado (db / migration / xxxxxxx_drop_table_xyz) como

 drop_table :tablename 

O si desea colocar la tabla sin migración, simplemente abra la consola de raíles

 $ rails c 

y ejecuta el siguiente comando

 ActiveRecord::Base.connection.execute("drop table table_name") 

o puedes usar un comando más simplificado

 ActiveRecord::Migration.drop_table(:table_name) 
  1. rails g migration drop_users
  2. editar la migración
  class DropUsers < ActiveRecord::Migration def change drop_table :users do |t| t.string :name t.timestamps end end end 
  1. rake db: migrar

Creo que, para ser completamente “oficial”, necesitarías crear una nueva migración y poner drop_table en self.up. El método selfdown debe contener todo el código para volver a crear la tabla. Presumiblemente, ese código solo podría tomarse de schema.rb en el momento de crear la migración.

Parece un poco extraño, poner código para crear una tabla que ya sabes que ya no vas a necesitar, pero que mantendrá todo el código de migración completo y “oficial”, ¿verdad?

Acabo de hacer esto por una mesa que necesitaba dejar caer, pero sinceramente no probé “abajo” y no estoy seguro de por qué lo haría.

simplemente puede soltar una mesa de la consola de Rails. primero abre la consola

 $ rails c 

luego pegue este comando en la consola

 ActiveRecord::Migration.drop_table(:table_name) 

reemplace table_name con la tabla que desea eliminar.

también puede colocar la tabla directamente desde la terminal. solo ingrese en el directorio raíz de su aplicación y ejecute este comando

 $ rails runner "Util::Table.clobber 'table_name'" 

Abre tu consola de Rails

 ActiveRecord::Base.connection.execute("drop table table_name") 

Puede retrotraer una migración tal como está en la guía:

http://guides.rubyonrails.org/active_record_migrations.html#reverting-previous-migrations

Generar una migración:

 rails generate migration revert_create_tablename 

Escribe la migración:

 require_relative '20121212123456_create_tablename' class RevertCreateTablename < ActiveRecord::Migration[5.0] def change revert CreateTablename end end 

De esta manera, también puede deshacer y puede usar para revertir cualquier migración

La manera simple y oficial sería esta:

  rails g migration drop_tablename 

Ahora vaya a su db / migrate y busque su archivo que contenga drop_tablename como el nombre del archivo y edítelo a esto.

  def change drop_table :table_name end 

Entonces necesitas correr

  rake db:migrate 

en tu consola.

ActiveRecord::Base.connection.drop_table :table_name

Necesitaba eliminar nuestros scripts de migración junto con las tablas en sí …

 class Util::Table < ActiveRecord::Migration def self.clobber(table_name) # drop the table if ActiveRecord::Base.connection.table_exists? table_name puts "\n== " + table_name.upcase.cyan + " ! " << Time.now.strftime("%H:%M:%S").yellow drop_table table_name end # locate any existing migrations for a table and delete them base_folder = File.join(Rails.root.to_s, 'db', 'migrate') Dir[File.join(base_folder, '**', '*.rb')].each do |file| if file =~ /create_#{table_name}.rb/ puts "== deleting migration: " + file.cyan + " ! " << Time.now.strftime("%H:%M:%S").yellow FileUtils.rm_rf(file) break end end end def self.clobber_all # delete every table in the db, along with every corresponding migration ActiveRecord::Base.connection.tables.each {|t| clobber t} end end 

desde la ventana de terminal ejecutada:

 $ rails runner "Util::Table.clobber 'your_table_name'" 

o

 $ rails runner "Util::Table.clobber_all" 

Alternativa a plantear excepciones o intentar recrear una tabla ahora vacía, mientras se sigue habilitando la reversión de migración, rehacer, etc.

def change drop_table(:users, force: true) if ActiveRecord::Base.connection.tables.include?('users') end

Ejecute este comando: –

 rails g migration drop_table_name 

entonces:

 rake db:migrate 

o si está utilizando la base de datos MySql, entonces:

  1. iniciar sesión con base de datos
  2. show databases;
  3. show tables;
  4. drop table_name;

la mejor manera que puedes hacer es

 rails g migration Drop_table_Users 

entonces haz lo siguiente

 rake db:migrate 

correr

 rake db:migrate:down VERSION= 

Donde es el número de versión de su archivo de migración que desea revertir.

Ejemplo:-

 rake db:migrate:down VERSION=3846656238 

si quieres soltar una tabla específica, puedes hacer

 $ rails db:migrate:up VERSION=[Here you can insert timestamp of table] 

de lo contrario, si desea eliminar toda su base de datos, puede hacerlo

 $rails db:drop 

Drop Table / Migration

ejecutar: – $ rails generan migración DropTablename

exp: – $ rails generan migración DropProducts