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