Wie lautet die Syntax für das Ablegen 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.
Für ältere Versionen von Rails
Ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
Für Rails 3 und höher
Rails generate migration RemoveFieldNameFromTableName field_name:datatype
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:
Rails generate migration RemoveFieldNameFromTableName field_name:datatype
Die generierte Migration sieht etwa so aus:
def up
remove_column :table_name, :field_name
end
def down
add_column :table_name, :field_name, :datatype
end
Stellen Sie sicher, dass Sie die Änderungsmethode nicht verwenden, wenn Sie Spalten aus einer Datenbanktabelle entfernen (Beispiel dafür, was Sie in der Migrationsdatei in Rails 3-Apps nicht möchten):
def change
remove_column :table_name, :field_name
end
Die Änderungsmethode in Rails 3 ist bei remove_column nicht intelligent, daher können Sie diese Migration nicht rückgängig machen.
In einer Rails4-App ist es möglich, die Änderungsmethode auch zum Entfernen von Spalten zu verwenden. Der dritte Parameter ist der data_type und im optionalen Bereich können Sie Optionen angeben. Es ist etwas versteckt im Abschnitt "Verfügbare Transformationen" auf der Dokumentation .
class RemoveFieldFromTableName < ActiveRecord::Migration
def change
remove_column :table_name, :field_name, :data_type, {}
end
end
Dafür gibt es zwei Möglichkeiten:
Sie können remove_column einfach wie folgt verwenden:
remove_column :users, :first_name
Dies ist in Ordnung, wenn Sie nur eine einzige Änderung an Ihrem Schema vornehmen müssen.
Sie können dies auch mit einem change_table-Block tun:
change_table :users do |t|
t.remove :first_name
end
Ich bevorzuge dies, da ich es lesbarer finde, und Sie können mehrere Änderungen gleichzeitig vornehmen.
Hier ist die vollständige Liste der unterstützten change_table-Methoden:
http://apidock.com/Rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
in Rails 5 können Sie diesen Befehl im Terminal verwenden:
Rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE
so entfernen Sie beispielsweise die Spalte access_level (string) von Tabellenbenutzern:
Rails generate migration remove_access_level_from_users access_level:string
und dann laufen:
rake db:migrate
Spalten für Rails 5-App entfernen
Rails g migration Remove<Anything>From<TableName> [columnName:type]
Der obige Befehl generiert eine Migrationsdatei im Verzeichnis db/migrate
. Snippet-Blow ist ein Beispiel für das Entfernen der Spalte aus dem durch den Rails-Generator generierten Beispiel.
class RemoveAgeFromUsers < ActiveRecord::Migration
def up
remove_column :users, :age
end
def down
add_column :users, :age, :integer
end
end
Ich habe auch eine Kurzanleitung für Rails erstellt, die unter hier zu finden ist.
Rails g migration RemoveXColumnFromY column_name:data_type
X = Spaltenname
Y = Tabellenname
EDIT
Geänderte RemoveXColumnToY
in RemoveXColumnFromY
gemäß den Kommentaren - sorgt für mehr Klarheit darüber, was die Migration tatsächlich macht.
Um die Spalte aus der Tabelle zu entfernen, müssen Sie folgende Migration ausführen:
Rails g migration remove_column_name_from_table_name column_name:data_type
Dann führen Sie den Befehl aus:
rake db:migrate
Generieren Sie eine Migration, um eine Spalte zu entfernen, sodass sie bei einer Migration (rake db:migrate
) Spalte löschen sollte. Und es sollte Spalte hinzufügen, wenn diese Migration zurückgesetzt wird (rake db:rollback
).
Die Syntax:
entfernungsspalte: tabellenname,: spaltenname,: typ
Entfernt die Spalte sowie fügt die Spalte zurück, wenn die Migration rückgängig gemacht wird.
Beispiel:
remove_column :users, :last_name, :string
Hinweis: Wenn Sie den Datentyp überspringen, wird die Spalte durch die Migration erfolgreich entfernt. Wenn Sie jedoch die Migration rückgängig machen, wird ein Fehler angezeigt.
Geben Sie den folgenden Befehl ein, den die Migrationsdatei selbst hinzufügen soll
Rails g migration RemoveColumnFromModel
Nachdem Sie den obigen Befehl ausgeführt haben, können Sie die Migrationsdatei überprüfen. Remove_column code muss dort selbst hinzugefügt werden
Dann migrieren Sie die Datenbank
rake db:migrate
So entfernen Sie die Spalte in nur 3 Schritten von der Tabelle:
Rails g migration remove_column_from_table_name
nach Ausführung dieses Befehls in Terminal eine Datei, die mit diesem Namen und Zeitstempel erstellt wurde (remove_column from_table_name).
Dann gehen Sie zu dieser Datei.
in der Datei musst du schreiben
remove_column :table_name, :column_name
Gehen Sie schließlich zur Konsole und tun Sie dann
rake db:migrate
remove_column
in der change
-Methode hilft Ihnen dabei, die Spalte aus der Tabelle zu löschen.
class RemoveColumn < ActiveRecord::Migration
def change
remove_column :table_name, :column_name, :data_type
end
end
Unter diesem Link finden Sie die vollständige Referenz: http://guides.rubyonrails.org/active_record_migrations.html
Mach das so;
Rails g migration RemoveColumnNameFromTables column_name:type
Das heißt Rails g migration RemoveTitleFromPosts title:string
Trotzdem ist es besser, die Ausfallzeit in Betracht zu ziehen, da ActiveRecord zur Laufzeit Datenbankspalten zwischenspeichert. Wenn Sie eine Spalte löschen, kann dies zu Ausnahmen führen, bis die App neu startet.
Ref: Starke Migration
Durchremove_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
Hier ist noch eine von der Rails Konsole
ActiveRecord::Migration.remove_column(:table_name, :column_name)
WARNUNG: Sie verlieren Daten, wenn Sie eine Spalte aus Ihrer Datenbank entfernen. Um fortzufahren, siehe unten:
Rails generate migration remove_fieldname_from_tablename fieldname:string
Beispiel:
accepted
-Spalte (einen booleschen Wert) aus der quotes
-Tabelle entfernen: Rails g migration RemoveAcceptedFromQuotes accepted:boolean
Es gibt eine spezielle syntaktische Verknüpfung, um Migrationen zu generieren, die .__ hinzufügen. Felder zu einer Tabelle.
Rails generieren die Migration add_fieldname_to_tablename Feldname: string
# db/migrate/20190122035000_remove_accepted_from_quotes.rb
class RemoveAcceptedFromQuotes < ActiveRecord::Migration[5.2]
# with Rails 5.2 you don't need to add a separate "up" and "down" method.
def change
remove_column :quotes, :accepted, :boolean
end
end
rake db:migrate
.... und dann geht's los zu den Rennen!
Sie können einfach die Spalte entfernen
remove_column :table_name, :column_name
Zum Beispiel,
remove_column :posts, :comment