it-swarm.com.de

Rails DB-Migration - Wie lösche ich eine Tabelle?

Ich fügte einen Tisch hinzu, von dem ich dachte, dass ich ihn brauchen würde, aber jetzt habe ich nicht mehr vor, ihn zu benutzen. Wie soll ich den Tisch entfernen?

Ich habe bereits Migrationen ausgeführt, die Tabelle befindet sich also in meiner Datenbank. Ich denke, Rails generate migration sollte damit umgehen können, aber ich habe noch nicht herausgefunden, wie.

Ich habe es versucht: 

Rails generate migration drop_tablename

aber das erzeugte nur eine leere Migration.

Was ist der "offizielle" Weg, einen Tisch in Rails fallen zu lassen?

451
Jason Whitehorn

Sie können die Migration nicht immer einfach so generieren, dass der gewünschte Code bereits vorhanden ist. Sie können eine leere Migration erstellen und sie mit dem Code füllen, den Sie benötigen.

Informationen zum Ausführen verschiedener Aufgaben in einer Migration finden Sie hier:

http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

Genauer gesagt können Sie sehen, wie Sie eine Tabelle mit dem folgenden Ansatz löschen:

drop_table :table_name
597
Pete

Erstellen Sie zunächst eine leere Migration mit einem beliebigen Namen. Es ist wichtig, dies auf diese Weise zu tun, da das entsprechende Datum erstellt wird.

Rails generate migration DropProductsTable

Dadurch wird eine .rb-Datei in/db/migrate/wie 20111015185025_drop_products_table.rb generiert

Bearbeiten Sie diese Datei jetzt so, dass sie wie folgt aussieht:

class DropProductsTable < ActiveRecord::Migration
  def up
    drop_table :products
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

Das einzige, was ich hinzugefügt habe, war drop_table :products und raise ActiveRecord::IrreversibleMigration.

Führen Sie dann rake db:migrate aus, und die Tabelle wird für Sie gelöscht.

330

Schreiben Sie die Migration manuell. Z.B. Rails g migration DropUsers ausführen.

Was den Code der Migration angeht, zitiere ich einfach den Beitrag von Maxwell Holder Rails Migration Checkliste

BAD - Laufen rake db:migrate und dann rake db:rollback schlagen fehl

class DropUsers < ActiveRecord::Migration
  def change
    drop_table :users
  end
end

GUT - zeigt die Absicht, dass Migration nicht reversibel sein sollte

class DropUsers < ActiveRecord::Migration
  def up
    drop_table :users
  end

  def down
    fail ActiveRecord::IrreversibleMigration
  end
end

BESSER - ist eigentlich umkehrbar

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

Während die hier bereitgestellten Antworten richtig funktionieren, wollte ich etwas "unkomplizierter", aber ich habe es hier gefunden: link Zuerst geben Sie die Rails-Konsole ein:

$Rails console

Dann tippen Sie einfach:

ActiveRecord::Migration.drop_table(:table_name)

Und fertig, für mich gearbeitet!

183
lllllll

Sie müssen mit dem folgenden Befehl eine neue Migrationsdatei erstellen

Rails generate migration drop_table_xyz

und schreibe drop_table-Code in eine neu generierte Migrationsdatei (db/migration/xxxxxxx_drop_table_xyz)

drop_table :tablename

Wenn Sie die Tabelle ohne Migration löschen möchten, öffnen Sie einfach die Rails-Konsole über

$ Rails c

und folgenden Befehl ausführen

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

oder Sie können einen vereinfachten Befehl verwenden

ActiveRecord::Migration.drop_table(:table_name)
35
Shahzad Tariq
  1. Rails g Migration drop_users
  2. bearbeiten Sie die Migration
    class DropUsers < ActiveRecord::Migration
      def change
        drop_table :users do |t|
          t.string :name
          t.timestamps
        end
      end
    end
  1. rake db: migrieren
21
Aashish Saini

Um ganz "offiziell" zu sein, müsste man eine neue Migration erstellen und drop_table in self.up. Die self.down-Methode sollte dann den gesamten Code enthalten, um die Tabelle vollständig neu zu erstellen. Vermutlich kann dieser Code zum Zeitpunkt der Erstellung der Migration nur aus schema.rb entnommen werden.

Es erscheint ein wenig seltsam, wenn Sie Code einfügen, um eine Tabelle zu erstellen, von der Sie wissen, dass Sie sie nicht mehr benötigen werden, aber das würde den gesamten Migrationscode vollständig und "offiziell" halten, oder?

Ich habe das nur für einen Tisch getan, den ich fallen lassen musste, aber ehrlich gesagt nicht das "down" getestet und nicht sicher, warum ich das tun würde.

13
Francis Potter

sie können einfach einen Tisch von der Rails-Konsole löschen Öffnen Sie zunächst die Konsole

$ Rails c

fügen Sie dann diesen Befehl in die Konsole ein

ActiveRecord::Migration.drop_table(:table_name)

ersetzen Sie table_name mit der Tabelle, die Sie löschen möchten.

sie können die Tabelle auch direkt vom Terminal löschen. Geben Sie einfach das Stammverzeichnis Ihrer Anwendung ein und führen Sie diesen Befehl aus

$ Rails runner "Util::Table.clobber 'table_name'"
11
Farzpal Singh

Sie können eine Migration so rückgängig machen, wie es im Handbuch beschrieben wird:

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

Generieren Sie eine Migration:

Rails generate migration revert_create_tablename

Schreiben Sie die Migration:

require_relative '20121212123456_create_tablename'

class RevertCreateTablename < ActiveRecord::Migration[5.0]
  def change
    revert CreateTablename    
  end
end

Auf diese Weise können Sie auch ein Rollback ausführen und jede Migration rückgängig machen

7
Matheus Silva

Öffnen Sie Ihre Rails-Konsole

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

Der einfache und offizielle Weg wäre folgender:

  Rails g migration drop_tablename

Gehen Sie nun zu db/migrate und suchen Sie nach Ihrer Datei, die den Namen drop_tablename als Dateinamen enthält, und bearbeiten Sie diesen.

    def change
      drop_table :table_name
    end

Dann musst du laufen

    rake db:migrate 

auf deiner Konsole.

6
Mahesh Mesta

Alternative zur Ausnahmebedingung oder zum Versuch, eine jetzt leere Tabelle erneut zu erstellen - und gleichzeitig das Rollback der Migration, das Wiederherstellen von Optionen usw. zu aktivieren -

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

ActiveRecord::Base.connection.drop_table :table_name

4
nhegroj

Ich konnte es nicht mit einem Migrationsskript zum Laufen bringen, also habe ich diese Lösung übernommen. Rufen Sie die Rails-Konsole über das Terminal auf:

Rails c

Art

ActiveRecord::Migration.drop_table(:tablename)

Es funktioniert gut für mich. Dadurch wird die vorherige Tabelle entfernt. Vergiss nicht zu laufen

Rails db:migrate
2
Srikanth V

Führen Sie diesen Befehl aus: -

Rails g migration drop_table_name

dann:

rake db:migrate

oder wenn Sie die MySql-Datenbank verwenden, dann:

  1. einloggen mit Datenbank
  2. show databases;
  3. show tables;
  4. drop table_name;
2
Nitin Rakesh

Ich musste unsere Migrationsskripte zusammen mit den Tabellen selbst löschen ...

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

vom Terminalfensterlauf:

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

oder

$ Rails runner "Util::Table.clobber_all"
2
Aaron Henderson

der beste Weg, den Sie tun können, ist 

Rails g migration Drop_table_Users

dann machen Sie folgendes

rake db:migrate
1
Anoob K Bava

Lauf

rake db:migrate:down VERSION=<version>

Dabei ist <version> die Versionsnummer Ihrer Migrationsdatei, die Sie zurücksetzen möchten.

Beispiel:-

rake db:migrate:down VERSION=3846656238
1
Rankit Ranjan

Wenn Sie die Tabelle aus dem Schema löschen möchten, führen Sie die folgende Operation aus:

Rails db:rollback
0
iamnair

wenn jemand sucht, wie man es in SQL macht.

geben Sie im Terminal Rails dbconsole ein

passwort eingeben

In der Konsole zu tun

USE db_name;

DROP TABLE table_name;

exit

Bitte vergessen Sie nicht, die Migrationsdatei und die Tabellenstruktur aus dem Schema zu entfernen

0
Shan

wenn Sie eine bestimmte Tabelle löschen möchten, können Sie dies tun

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

andernfalls können Sie die gesamte Datenbank löschen

$Rails db:drop
0