it-swarm.com.de

Fügen Sie einer Spalte durch eine Migration einen Standardwert hinzu

Wie füge ich einer Spalte, die während einer Migration bereits vorhanden ist, einen Standardwert hinzu?

Die gesamte Dokumentation, die ich finden kann, zeigt Ihnen, wie Sie dies tun, wenn die Spalte noch nicht vorhanden ist. In diesem Fall ist dies jedoch der Fall.

255
Jon

So solltest du es machen:

change_column :users, :admin, :boolean, :default => false

Einige Datenbanken, wie PostgreSQL, aktualisieren jedoch das Feld für zuvor erstellte Zeilen nicht. Aktualisieren Sie das Feld daher auch bei der Migration manuell.

332
change_column_default :employees, :foreign, false
179
Gazza

Verwenden Sie für Rails 4 + change_column_default

def change
  change_column_default :table, :column, value
end
104
csi

Die Verwendung von def change Bedeutet, dass Sie umkehrbare Migrationen schreiben sollten. Und change_column Ist nicht umkehrbar. Sie können nach oben gehen, aber nicht nach unten, da change_column Irreversibel ist.

Obwohl es sich um ein paar zusätzliche Zeilen handelt, sollten Sie stattdessen def up Und def down Verwenden.

Wenn Sie also eine Spalte ohne Standardwert haben, sollten Sie dies tun, um einen Standardwert hinzuzufügen.

def up
  change_column :users, :admin, :boolean, default: false
end

def down
  change_column :users, :admin, :boolean, default: nil
end

Oder wenn Sie den Standardwert für eine vorhandene Spalte ändern möchten.

def up
  change_column :users, :admin, :boolean, default: false
end

def down
  change_column :users, :admin, :boolean, default: true
end
44
bfcoder

** Rails 4.X + **

Ab Rails 4 können Sie keine Migration generieren, um einer Tabelle mit einem Standardwert eine Spalte hinzuzufügen. Die folgenden Schritte fügen einer vorhandenen Tabelle mit einem Standardwert eine neue Spalte hinzu wahr oder falsch.

1. Führen Sie die Migration über die Befehlszeile aus, um die neue Spalte hinzuzufügen.

$ Rails generate migration add_columnname_to_tablename columnname:boolean

Der obige Befehl fügt eine neue Spalte in Ihre Tabelle ein.

2. Setzen Sie den neuen Spaltenwert auf TRUE/FALSE, indem Sie die neu erstellte Migrationsdatei bearbeiten.

class AddColumnnameToTablename < ActiveRecord::Migration
  def change
    add_column :table_name, :column_name, :boolean, default: false
  end
end

**3. Führen Sie den folgenden Befehl in Terminal ** aus, um die Änderungen in Ihrer Anwendungsdatenbanktabelle vorzunehmen.

$ rake db:migrate
33
Praveen George

Ausführen:

Rails generate migration add_column_to_table column:boolean

Es wird diese Migration erzeugen:

class AddColumnToTable < ActiveRecord::Migration
  def change
    add_column :table, :column, :boolean
  end
end

Legen Sie den Standardwert für das Hinzufügen fest: default => 1

add_column: table,: column,: boolean,: default => 1

Lauf:

rechen db: migrieren

8
axeltaglia