315 votes

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

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

Toute la documentation que je peux trouver vous montre comment le faire si la colonne n’existe pas déjà, mais dans ce cas elle le fait.

399voto

Maurício Linhares Points 19468

Voici comment vous devriez le faire:

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

Mais certaines bases de données, comme PostgreSQL, ne mettront pas à jour le champ pour les lignes précédemment créées. Assurez-vous également de mettre à jour le champ manuellement sur la migration.

207voto

Gazza Points 686

change_column_default :employees, :foreign, false

59voto

bfcoder Points 588

À l'aide de def change signifie que vous devriez écrire des migrations qui sont réversibles. Et change_column n'est pas réversible. Vous pouvez aller jusqu'mais vous ne pouvez pas aller vers le bas, depuis change_column est irréversible.

Au lieu de cela, si cela peut être un couple de lignes supplémentaires, vous devez utiliser def up et def down

Donc, si vous avez une colonne avec pas de valeur par défaut, alors vous devriez le faire pour 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 voulez changer la valeur par défaut pour une colonne existante.

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

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

11voto

axeltaglia Points 370

Exécuter:

 rails generate migration add_column_to_table column:boolean
 

Il générera cette migration:

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

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

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

Courir:

rake db: migrer

-61voto

rookieRailer Points 1295
Voici ce que vous pouvez faire :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X