it-swarm.com.de

So löschen Sie Spalten mithilfe der Rails-Migration

Wie lautet die Syntax für das Ablegen einer Datenbanktabellenspalte durch eine Rails-Migration?

543
Ethan
remove_column :table_name, :column_name

Zum Beispiel:

remove_column :users, :hobby

würde die Hobby-Spalte aus der Benutzertabelle entfernen.

807
Nick Hammond

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
349
prabu

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. 

109
Powers

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
33

Dafür gibt es zwei Möglichkeiten:

remove_column

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.

change_table-Block

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

21
superluminary

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
13
aschmid

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. 

10
Xinyang Li
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.

10
eden

Sie können folgendes versuchen:

remove_column :table_name, :column_name

( Offizielle Dokumentation )

8
Jordan Running

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
7
Koresol

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.

6
Imran

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
5
prash

So entfernen Sie die Spalte in nur 3 Schritten von der Tabelle:

  1. schreibe diesen Befehl 

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.

  1. in der Datei musst du schreiben

    remove_column :table_name, :column_name

  2. Gehen Sie schließlich zur Konsole und tun Sie dann

    rake db:migrate

5
Karan Bamniya

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

4
Dharmesh Rupani

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

1
Nuttapon

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

0
Manh Cuong

Hier ist noch eine von der Rails Konsole

ActiveRecord::Migration.remove_column(:table_name, :column_name)

0
TD-Rails

Einfache Schritt für Schritt Anweisungen für Schienen 5.2

WARNUNG: Sie verlieren Daten, wenn Sie eine Spalte aus Ihrer Datenbank entfernen. Um fortzufahren, siehe unten:


1. Erstellen Sie eine Migration

  • Führen Sie den folgenden Befehl in Ihrem Terminal aus: 

Rails generate migration remove_fieldname_from_tablename fieldname:string

  • Hinweis: Der Tabellenname sollte gemäß der Rails-Konvention im Plural sein.

Beispiel:

  • In meinem Fall möchte ich die accepted-Spalte (einen booleschen Wert) aus der quotes-Tabelle entfernen: 

Rails g migration RemoveAcceptedFromQuotes accepted:boolean

  • Siehe Dokumentation re: eine Konvention beim Hinzufügen/Entfernen von Feldern zu einer Tabelle: 

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

2. Überprüfen Sie die Migration

# 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

3. Führen Sie die Migration aus

rake db:migrate

.... und dann geht's los zu den Rennen!

0
BKSpurgeon

Sie können einfach die Spalte entfernen

remove_column :table_name, :column_name

Zum Beispiel,

remove_column :posts, :comment
0
Foram Thakral