Wie lautet die Syntax zum Löschen einer Datenbanktabellenspalte durch eine Rails-Migration?
625
Wie lautet die Syntax zum Löschen einer Datenbanktabellenspalte durch eine Rails-Migration?
remove_column :table_name, :column_name
Zum Beispiel:
remove_column :users, :hobby
würde die Hobby-Spalte aus der Benutzertabelle entfernen.
up
und außerhalb derdown
Methoden tunchange
, wie in der Antwort von @Powers erläutert.remove_column :table_name, :column_name, :type, :options
innerhalb derchange
Methode verwenden, da die Migration möglich ist, wenn Sie den Typ angeben, der zurückgesetzt werden soll. Aus der Dokumentation: Dietype
undoptions
Parameter , falls vorhanden ignoriert. Es kann hilfreich sein, diese in derchange
Methode einer Migration anzugeben, damit sie zurückgesetzt werden kann. In diesem Falltype
undoptions
wird von add_column verwendet.change
Methode entfernen , jedoch nur, wenn Sie den Spaltentyp angeben. ZBremove_column, :table_name, :column_name, :column_type
. Andernfalls wird beim Versuch, die Migration auszuführen, die folgende Fehlermeldung angezeigt:remove_column is only reversible if given a type
Für ältere Versionen von Rails
Für Schienen 3 und höher
quelle
rails g migration remove_field_name_from_table_name field_name:datatype
funktioniert auchAddXXXtoTTT
eineRemoveXXXFromTTT
Liste mit weißem Abstand von Dateiname: Datentyp folgen kann und die entsprechenden Anweisungen add_column und remove_column erstellt werden: Entferntrails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
zwei Attribute mithilfe einer einzelnen Migration. Beachten Sie auch , dassremove_column
nicht unterstützt vonchange
Verfahren, so dass Sie beide schreiben müssenup
unddown
.change
. Rollback funktioniert wie es sollte.change
Methode verwenden, die zurückgesetzt werden kann *, müssen Sie den Datentyp (und alle anderen Feldmodifikatoren) angeben. Wenn Sie diese Migration zurücksetzen, kann das Feld korrekt neu erstellt werden. * Wenn ich "Zurückgesetzt" sage, bedeutet dies natürlich, dass Daten aus dieser Spalte verloren gehen.Rails 4 wurde aktualisiert, sodass die Änderungsmethode bei der Migration zum Löschen einer Spalte verwendet werden kann und die Migration erfolgreich zurückgesetzt wird. Bitte lesen Sie die folgende Warnung für Rails 3-Anwendungen:
Schienen 3 Warnung
Bitte beachten Sie Folgendes, wenn Sie diesen Befehl verwenden:
Die generierte Migration sieht ungefähr so aus:
Stellen Sie sicher, dass Sie die Änderungsmethode nicht verwenden, wenn Sie Spalten aus einer Datenbanktabelle entfernen (Beispiel für das, was Sie in der Migrationsdatei in Rails 3-Apps nicht möchten):
Die Änderungsmethode in Rails 3 ist nicht klug, wenn es um remove_column geht, sodass Sie diese Migration nicht rückgängig machen können.
quelle
change
Methode verwenden, wird derrake db:rollback
Befehl fehlerhaft ausgegeben .rake db:rollback
ist im Grunde das Gegenteil vonrake db:migrate
. Dieser Fehler wurde in Rails 4 behoben :)In einer Rails4-App ist es möglich, die Änderungsmethode auch zum Entfernen von Spalten zu verwenden. Der dritte Parameter ist der Datentyp und im optionalen vierten können Sie Optionen angeben. Es ist etwas versteckt im Abschnitt 'Verfügbare Transformationen' in der Dokumentation .
quelle
Es gibt zwei gute Möglichkeiten, dies zu tun:
remove_column
Sie können remove_column einfach wie folgt verwenden:
Dies ist in Ordnung, wenn Sie nur eine einzige Änderung an Ihrem Schema vornehmen müssen.
change_table-Block
Sie können dies auch mit einem change_table-Block tun, wie folgt:
Ich bevorzuge dies, da ich es besser lesbar finde und Sie mehrere Änderungen gleichzeitig vornehmen können.
Hier ist die vollständige Liste der unterstützten change_table-Methoden:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
quelle
In Rails 5 können Sie diesen Befehl im Terminal verwenden:
So entfernen Sie beispielsweise die Spalte access_level (Zeichenfolge) von Tabellenbenutzern:
und dann ausführen:
quelle
Generieren Sie eine Migration, um eine Spalte so zu entfernen, dass sie bei einer Migration (
rake db:migrate
) die Spalte löschen sollte . Und es sollte eine Spalte zurück hinzufügen, wenn diese Migration zurückgesetzt wird (rake db:rollback
).Die Syntax:
remove_column: table_name ,: column_name ,: type
Beispiel:
Hinweis : Wenn Sie den Datentyp überspringen , wird die Spalte bei der Migration erfolgreich entfernt. Wenn Sie die Migration jedoch zurücksetzen , wird ein Fehler ausgegeben .
quelle
Klare und einfache Anweisungen für Schienen 5.2
1. Erstellen Sie eine Migration
Führen Sie den folgenden Befehl in Ihrem Terminal aus:
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
Hinweis: Der Tabellenname sollte gemäß der Schienenkonvention im Plural vorliegen.
Beispiel:
In meinem Fall möchte ich die
accepted
Spalte (einen booleschen Wert) aus derquotes
Tabelle entfernen :rails g migration RemoveAcceptedFromQuotes accepted:boolean
Weitere Informationen zum Hinzufügen / Entfernen von Feldern zu einer Tabelle finden Sie in der Dokumentation zu : einer Konvention:
2. Überprüfen Sie die Migration
3. Führen Sie die Migration aus
rake db:migrate
.... und dann geht es los zu den Rennen!
quelle
rails db:migrate
Spalten für RAILS 5 App entfernen
Der obige Befehl generiert eine Migrationsdatei im
db/migrate
Verzeichnis. Snippet Blow ist eine der Spalten aus dem Tabellenbeispiel entfernen, die vom Rails-Generator generiert wurden.Ich habe auch eine Kurzanleitung für Rails erstellt, die hier zu finden ist .
quelle
Sie können Folgendes versuchen:
( Offizielle Dokumentation )
quelle
X = Spaltenname
Y = Tabellenname
BEARBEITEN
Geändert
RemoveXColumnToY
zuRemoveXColumnFromY
gemäß Kommentar - bietet mehr Klarheit darüber, was die Migration tatsächlich tut.quelle
Um die Spalte aus der Tabelle zu entfernen, müssen Sie folgende Migration ausführen:
Führen Sie dann den folgenden Befehl aus:
quelle
Geben Sie den folgenden Befehl ein, der in der Migrationsdatei selbst hinzugefügt wird
Nachdem Sie den obigen Befehl ausgeführt haben, können Sie überprüfen, ob die Migrationsdatei remove_column Code dort selbst hinzugefügt werden muss
Migrieren Sie dann die Datenbank
quelle
remove_column
Mit derchange
Methode in können Sie die Spalte aus der Tabelle löschen.Klicken Sie auf diesen Link, um eine vollständige Referenz zu erhalten: http://guides.rubyonrails.org/active_record_migrations.html
quelle
Zum Entfernen der Spalte aus der Tabelle in nur 3 einfachen Schritten wie folgt:
rails g migration remove_column_from_table_name
Nach dem Ausführen dieses Befehls in Terminal wird eine Datei erstellt, die mit diesem Namen und Zeitstempel erstellt wurde (remove_column from_table_name).
Dann gehen Sie zu dieser Datei.
Innerhalb der Datei müssen Sie schreiben
remove_column :table_name, :column_name
Zum Schluss zur Konsole gehen und dann tun
rake db:migrate
quelle
Hier ist noch einer von der Schienenkonsole
ActiveRecord::Migration.remove_column(:table_name, :column_name)
quelle
Durch
remove_column :table_name, :column_name
in einer Migrationsdatei
Sie können eine Spalte direkt in einer Rails-Konsole entfernen, indem Sie Folgendes eingeben:
ActiveRecord::Base.remove_column :table_name, :column_name
quelle
Mach das so;
rails g migration RemoveColumnNameFromTables column_name:type
Dh
rails g migration RemoveTitleFromPosts title:string
Auf jeden Fall sollten Sie auch Ausfallzeiten berücksichtigen, da ActiveRecord zur Laufzeit Datenbankspalten zwischenspeichert. Wenn Sie also eine Spalte löschen, kann dies zu Ausnahmen führen, bis Ihre App neu gestartet wird.
Ref: Starke Migration
quelle
Sie können einfach die Spalte entfernen
Zum Beispiel,
quelle
Versuchen Sie zunächst, eine Migrationsdatei zu erstellen, in der der Befehl ausgeführt wird:
Führen Sie dann im Stammverzeichnis des Projekts die Migration aus, indem Sie den folgenden Befehl ausführen:
quelle