584 Stimmen

Rails DB Migration - Wie kann man eine Tabelle löschen?

Ich habe eine Tabelle hinzugefügt, von der ich dachte, dass ich sie brauche, die ich jetzt aber nicht mehr verwenden möchte. Wie sollte ich diese Tabelle entfernen?

Ich habe bereits Migrationen durchgeführt, die Tabelle befindet sich also in meiner Datenbank. Ich denke rails generate migration sollte in der Lage sein, dies zu handhaben, aber ich habe noch nicht herausgefunden, wie.

Ich habe es versucht:

rails generate migration drop_tablename

aber das hat nur eine leere Migration erzeugt.

Was ist der "offizielle" Weg zum Löschen einer Tabelle in Rails?

1 Stimmen

Desde rails generate migration über Befehlszeilenoptionen für die Generierung von Migrationscode zum Erstellen von Tabellen, Hinzufügen oder Ändern von Spalten usw. verfügt, wäre es schön, wenn es auch eine Option zum Löschen einer Tabelle gäbe - aber das ist nicht der Fall. Sicher, das Schreiben der up Teil ist einfach - rufen Sie einfach drop_table -- aber die down Teil, die Neuerstellung der Tabelle, ist nicht immer so einfach, vor allem wenn das Schema der betreffenden Tabelle nach ihrer ursprünglichen Erstellung durch Migrationen geändert wurde. Vielleicht sollte jemand den Entwicklern von Rails vorschlagen, dass es eine gute Idee wäre, eine solche Option hinzuzufügen.

5 Stimmen

@TeemuLeisti Wie wäre es, wenn Sie einfach die aktuelle Tabellendefinition aus schema.rb kopieren und einfügen? Ich mache das immer so...

1 Stimmen

@João Soares: OK, ich denke, das funktioniert. Es wäre jedoch schön, wenn der Prozess automatisiert werden könnte, so dass man einfach eine rake Migrationserstellungsbefehl, mit dem Namen einer Tabelle als Parameter, der die benötigten up y down Funktionen.

14voto

farz bhullar Punkte 441

Können Sie einfach eine Tabelle aus der Rails-Konsole löschen. öffnen Sie zunächst die Konsole

$ rails c

dann fügen Sie diesen Befehl in die Konsole ein

ActiveRecord::Migration.drop_table(:table_name)

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

Sie können die Tabelle auch direkt vom Terminal aus löschen. Gehen Sie einfach in das Root-Verzeichnis Ihrer Anwendung und führen Sie folgenden Befehl aus

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

12voto

aqwan Punkte 430

Alternative zum Auslösen einer Exception oder dem Versuch, eine nun leere Tabelle neu zu erstellen - bei gleichzeitiger Ermöglichung von Migrations-Rollback, Redo usw. -

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

9voto

Sarvar Khalimov Punkte 363

Sie können nicht einfach laufen drop_table :table_name Stattdessen können Sie eine leere Migration erstellen, indem Sie den Befehl ausführen: rails g migration DropInstalls

Diese können Sie dann in diese leere Migration einfügen:

class DropInstalls < ActiveRecord::Migration
  def change
    drop_table :installs
  end
end

Dann laufen rails db:migrate in der Befehlszeile, was die Tabelle Installs entfernen sollte Die Lösung wurde gefunden ici

0 Stimmen

Lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben, ich werde versuchen, so schnell wie möglich zu antworten

6voto

manish nautiyal Punkte 2448

Öffnen Sie die Rails-Konsole

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

5voto

nhegroj Punkte 59

ActiveRecord::Base.connection.drop_table :table_name

0 Stimmen

Wenn Sie in einer Entwicklungsumgebung arbeiten, ist dies eine viel einfachere Lösung als Antworten mit mehr Stimmen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X