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.

24voto

Aashish Saini Punkte 251
  1. Schienen g Migration drop_users

  2. die Migration bearbeiten

    class DropUsers < ActiveRecord::Migration
      def change
        drop_table :users do |t|
          t.string :name
          t.timestamps
        end
      end
    end
  3. rake db:migrate

17voto

Mahesh Mesta Punkte 743

Der einfache und offizielle Weg wäre der folgende:

  rails g migration drop_tablename

Gehen Sie nun zu Ihrer db/migrate und suchen Sie die Datei, die drop_tablesame als Dateinamen enthält, und ändern Sie sie wie folgt.

    def change
      drop_table :table_name
    end

Dann müssen Sie Folgendes ausführen

    rake db:migrate 

auf Ihrer Konsole.

16voto

Srikanth V Punkte 219

Ich war nicht in der Lage, es mit dem Migrationsskript zum Laufen zu bringen, also habe ich diese Lösung gewählt. Geben Sie die Rails-Konsole über das Terminal ein:

rails c

Typ

ActiveRecord::Migration.drop_table(:tablename)

Für mich funktioniert das gut. Dadurch wird die vorherige Tabelle entfernt. Vergessen Sie nicht, den Befehl

rails db:migrate

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'"

14voto

Sidney Punkte 1099

Sie können eine Migration so zurücksetzen, wie sie im Leitfaden beschrieben ist:

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

Erzeugen 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 durchführen und jede Migration rückgängig machen.

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