Ich habe eine Tabelle hinzugefügt, von der ich dachte, dass ich sie brauchen würde, aber jetzt habe ich nicht mehr vor, sie zu verwenden. Wie soll ich diese Tabelle entfernen?
Ich habe bereits Migrationen ausgeführt, daher befindet sich die Tabelle in meiner Datenbank. Ich denkerails 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 hat gerade eine leere Migration erzeugt.
Was ist der "offizielle" Weg, um einen Tisch in Rails abzulegen?
ruby-on-rails
database
ruby-on-rails-3
migration
rake
Jason Whitehorn
quelle
quelle
rails generate migration
es Befehlszeilenoptionen zum Generieren von Migrationscode zum Erstellen von Tabellen, Hinzufügen oder Ändern von Spalten usw. gibt, wäre es schön, wenn es auch eine Option zum Löschen einer Tabelle hätte - aber nicht. Sicher, das Schreiben desup
Teils ist einfach - rufen Sie einfach aufdrop_table
-, aber dasdown
Teil, das die Tabelle erneut generiert, ist möglicherweise nicht immer so einfach, insbesondere wenn das Schema der betreffenden Tabelle nach der ersten Erstellung durch Migrationen geändert wurde. Vielleicht sollte jemand den Entwicklern von Rails vorschlagen, dass das Hinzufügen einer solchen Option eine gute Idee wäre.rake
Befehl zur Erstellung der Migration mit dem Namen einer Tabelle als Parameter eingeben könnten , der die erforderlichen Funktionenup
unddown
Funktionen erzeugt.Antworten:
Sie können die Migration nicht immer einfach generieren, um bereits den gewünschten Code zu erhalten. Sie können eine leere Migration erstellen und diese dann mit dem benötigten Code füllen.
Informationen zum Ausführen verschiedener Aufgaben in einer Migration finden Sie hier:
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Insbesondere können Sie sehen, wie Sie eine Tabelle mit dem folgenden Ansatz löschen:
quelle
Generieren 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.
Dadurch wird eine .rb-Datei in / db / migrate / like 20111015185025_drop_products_table.rb generiert
Bearbeiten Sie nun diese Datei so, dass sie folgendermaßen aussieht:
Das einzige was ich hinzufügte war
drop_table :products
undraise ActiveRecord::IrreversibleMigration
.Dann renne
rake db:migrate
und es wird den Tisch für dich fallen lassen.quelle
down
Methode neu erstellen, werden sie nicht wiederhergestellt, sodass es sich nicht um ein ordnungsgemäßes Rollback handelt. Es ist besser, klar anzuzeigen, dass die Migration irreversibel ist, als ein falsches Gefühl zu geben, von dem sie wiederhergestellt werden kann.Schreiben Sie Ihre Migration manuell. ZB laufen
rails g migration DropUsers
.Was den Code der Migration betrifft, zitiere ich nur die Post Rails Migration Checkliste von Maxwell Holder
BAD - läuft
rake db:migrate
und wird dannrake db:rollback
scheiternGUT - zeigt die Absicht, dass Migration nicht reversibel sein sollte
BESSER - ist eigentlich reversibel
quelle
schema.rb
Vergessen Sie beim Ausschneiden und Einfügen in den Block nicht, auch nachschema.rb
Fremdschlüsseln zu suchen .drop_table
t.foreign_key "other_table"
Während die hier gegebenen Antworten richtig funktionieren, wollte ich etwas "Unkomplizierteres", das ich hier gefunden habe: link Geben Sie zuerst die Rails-Konsole ein:
Dann geben Sie einfach Folgendes ein:
Und fertig, für mich gearbeitet!
quelle
rails destroy model User
Sie müssen eine neue Migrationsdatei mit dem folgenden Befehl erstellen
und schreibe drop_table Code in neu generierte Migrationsdatei (db / migration / xxxxxxx_drop_table_xyz) wie
Oder wenn Sie eine Tabelle ohne Migration löschen möchten, öffnen Sie einfach die Rails-Konsole von
und führen Sie den folgenden Befehl aus
oder Sie können einen vereinfachten Befehl verwenden
quelle
quelle
Ich denke, um vollständig "offiziell" zu sein, müssten Sie eine neue Migration erstellen und drop_table in self.up einfügen. Die self.down-Methode sollte dann den gesamten Code enthalten, um die Tabelle vollständig neu zu erstellen. Vermutlich könnte dieser Code zum Zeitpunkt der Erstellung der Migration nur aus schema.rb entnommen werden.
Es scheint ein wenig seltsam, Code einzugeben, um eine Tabelle zu erstellen, von der Sie wissen, dass Sie sie nicht mehr benötigen, aber das würde den gesamten Migrationscode vollständig und "offiziell" halten, oder?
Ich habe das nur für einen Tisch gemacht, den ich fallen lassen musste, aber ehrlich gesagt habe ich das "down" nicht getestet und bin mir nicht sicher, warum ich es tun würde.
quelle
raise ActiveRecord::IrreversibleMigration
in der self.down-Methode verwenden, sodass Sie sich mindestens einen Fehler / Hinweis geben, wenn Sie jemals versuchen, einen Rollback durchzuführen.CreateMyTable.up
undActiveRecord::Migrator.run(:up, ActiveRecord::Migrator.migrations_paths, X)
wo X die Migration ist, die die Tabelle ursprünglich erstellt hat, aber keine funktioniert - in beiden Ansätzen prüft AR zuerst, ob die Migration bereits angewendet wurde, und überspringt sie stillschweigend, wenn dies der Fall ist. `Sie können einfach einen Tisch von der Rails-Konsole ablegen. Öffnen Sie zuerst die Konsole
Fügen Sie dann diesen Befehl in die Konsole ein
Ersetzen Sie tabellenname durch die Tabelle, die Sie löschen möchten.
Sie können die Tabelle auch direkt vom Terminal aus löschen. Geben Sie einfach in das Stammverzeichnis Ihrer Anwendung ein und führen Sie diesen Befehl aus
quelle
Der einfache und offizielle Weg wäre folgender:
Gehen Sie nun zu Ihrer Datenbank / migrate und suchen Sie nach Ihrer Datei, die den Dateinamen drop_tablename enthält, und bearbeiten Sie diese.
Dann musst du rennen
auf Ihrer Konsole.
quelle
Sie können eine Migration wie im Handbuch beschrieben zurücksetzen:
http://guides.rubyonrails.org/active_record_migrations.html#reverting-previous-migrations
Eine Migration generieren:
Schreiben Sie die Migration:
Auf diese Weise können Sie auch ein Rollback durchführen und die Migration rückgängig machen
quelle
Alternative zum Auslösen einer Ausnahme oder zum Versuch, eine jetzt leere Tabelle neu zu erstellen - während das Zurücksetzen, Wiederherstellen usw. der Migration weiterhin aktiviert ist -
quelle
Ich konnte es nicht mit dem Migrationsskript zum Laufen bringen, also habe ich diese Lösung weiterentwickelt. Geben Sie die Rails-Konsole über das Terminal ein:
Art
Es funktioniert gut für mich. Dadurch wird die vorherige Tabelle entfernt. Vergiss nicht zu rennen
quelle
Öffnen Sie Ihre Schienenkonsole
quelle
ActiveRecord::Base.connection.drop_table :table_name
quelle
Ich musste unsere Migrationsskripte zusammen mit den Tabellen selbst löschen ...
vom Terminalfenster ausführen:
oder
quelle
Der beste Weg, den Sie tun können, ist
Führen Sie dann die folgenden Schritte aus
quelle
Lauf
Wo
<version>
ist die Versionsnummer Ihrer Migrationsdatei, die Sie zurücksetzen möchten?Beispiel:-
quelle
wenn jemand sucht, wie es in SQL geht.
Typ
rails dbconsole
vom TerminalPasswort eingeben
In der Konsole tun
USE db_name;
DROP TABLE table_name;
exit
Bitte vergessen Sie nicht, die Migrationsdatei und die Tabellenstruktur aus dem Schema zu entfernen
quelle
rails db
Wenn Sie eine bestimmte Tabelle löschen möchten, können Sie dies tun
Andernfalls können Sie dies tun, wenn Sie Ihre gesamte Datenbank löschen möchten
quelle
Tabelle / Migration löschen
Ausführen: - $ Rails generieren Migration DropTablename
exp: - $ Rails generieren Migration DropProducts
quelle
Führen Sie diesen Befehl aus: -
dann:
oder wenn Sie eine MySQL-Datenbank verwenden, dann:
show databases;
show tables;
drop table_name;
quelle
Wenn Sie die Tabelle aus dem Schema löschen möchten, führen Sie die folgende Operation aus:
quelle