Wie füge ich einer Spalte, die bereits während einer Migration vorhanden ist, einen Standardwert hinzu?
Die gesamte Dokumentation, die ich finden kann, zeigt Ihnen, wie es geht, wenn die Spalte noch nicht vorhanden ist, in diesem Fall jedoch.
Wie füge ich einer Spalte, die bereits während einer Migration vorhanden ist, einen Standardwert hinzu?
Die gesamte Dokumentation, die ich finden kann, zeigt Ihnen, wie es geht, wenn die Spalte noch nicht vorhanden ist, in diesem Fall jedoch.
So sollten Sie es machen:
change_column :users, :admin, :boolean, :default => false
Einige Datenbanken, wie z. B. PostgreSQL, aktualisieren das Feld für zuvor erstellte Zeilen jedoch nicht. Stellen Sie daher sicher, dass Sie das Feld auch bei der Migration manuell aktualisieren.
up
Block anstatt in einen Block einchange
. Sie können dendown
Block leer lassen. Die Tabelle wird nicht in den ursprünglichen Zustand zurückgesetzt, aber die Migration kann zurückgesetzt werden.quelle
from:
undto:
wenn Sie möchten, dass es reversibel ist :)from
undto
wurde in Rails 5+ in diesem Commit hinzugefügt: github.com/rails/rails/pull/20018/filesVerwenden Sie für Rails 4+
change_column_default
quelle
def change
`add_column: foos ,: name, default:" etwas für vorhandene Werte "` `change_column_default: foos ,: name, default:" "`end
change_column_default :products, :approved, from: true, to: false
- aber es funktioniert auch nicht.Mit
def change
bedeutet, dass Sie Migrationen schreiben sollten, die reversibel sind. Undchange_column
ist nicht umkehrbar. Sie können nach oben gehen, aber Sie können nicht nach unten gehen, da dieschange_column
irreversibel ist.Stattdessen, obwohl es ein paar zusätzliche Zeilen sein können, sollten Sie verwenden
def up
unddef down
Wenn Sie also eine Spalte ohne Standardwert haben, sollten Sie dies tun, um einen Standardwert hinzuzufügen.
Oder wenn Sie den Standardwert für eine vorhandene Spalte ändern möchten.
quelle
** Schienen 4.X + **
Ab Rails 4 können Sie keine Migration generieren, um einer Tabelle mit einem Standardwert eine Spalte hinzuzufügen. Mit den folgenden Schritten wird einer vorhandenen Tabelle mit dem Standardwert true oder false eine neue Spalte hinzugefügt.
1. Führen Sie die Migration von der Befehlszeile aus, um die neue Spalte hinzuzufügen
Mit dem obigen Befehl wird eine neue Spalte in Ihre Tabelle eingefügt.
2. Setzen Sie den neuen Spaltenwert auf TRUE / FALSE, indem Sie die neu erstellte Migrationsdatei bearbeiten.
**3. Führen Sie den folgenden Befehl in Terminal ** aus, um die Änderungen in Ihrer Anwendungsdatenbanktabelle vorzunehmen
quelle
Ausführen:
Diese Migration wird generiert:
Stellen Sie den Standardwert ein, indem Sie Folgendes hinzufügen: Standard => 1
Lauf:
quelle
Key is not present in table error
.Folgendes können Sie tun:
EDIT: ... aber anscheinend ist das ein Rookie-Fehler!
quelle
before_save