web-dev-qa-db-fra.com

Ajouter une valeur par défaut à une colonne via une migration

Comment ajouter une valeur par défaut à une colonne qui existe déjà lors d'une migration?

Toute la documentation que je peux trouver vous montre comment procéder si la colonne n'existe pas déjà, mais dans ce cas, elle existe.

255
Jon

Voici comment vous devriez le faire:

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

Cependant, certaines bases de données, telles que PostgreSQL, ne mettront pas à jour le champ pour les lignes créées précédemment. Veillez donc à mettre à jour le champ manuellement lors de la migration.

332
Maurício Linhares
change_column_default :employees, :foreign, false
179
Gazza

Pour Rails 4 + , utilisez change_column_default

_def change
  change_column_default :table, :column, value
end
_
104
csi

Utiliser def change signifie que vous devez écrire des migrations réversibles. Et change_column n'est pas réversible. Vous pouvez monter mais vous ne pouvez pas descendre, car change_column est irréversible.

Au lieu de cela, bien que cela puisse être quelques lignes supplémentaires, vous devriez utiliser def up et def down

Donc, si vous avez une colonne sans valeur par défaut, vous devez alors ajouter une valeur par défaut.

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

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

Ou si vous souhaitez modifier la valeur par défaut d'une colonne existante.

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 + **

À partir de Rails 4, vous ne pouvez pas générer de migration pour ajouter une colonne à une table avec une valeur par défaut, Les étapes suivantes permettent d'ajouter une nouvelle colonne à une table existante avec la valeur par défaut true ou false .

1. Exécutez la migration à partir de la ligne de commande pour ajouter la nouvelle colonne

$ Rails generate migration add_columnname_to_tablename columnname:boolean

La commande ci-dessus va ajouter une nouvelle colonne dans votre tableau.

2. Définissez la valeur de la nouvelle colonne sur TRUE/FALSE en modifiant le nouveau fichier de migration créé.

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

** 3. Pour apporter les modifications à votre table de base de données d’application, exécutez la commande suivante dans le terminal **

$ rake db:migrate
33
Praveen George

Exécuter:

Rails generate migration add_column_to_table column:boolean

Cela va générer cette migration:

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

Définissez la valeur par défaut en ajoutant: default => 1

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

Courir:

rake db: migrer

8
axeltaglia