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.
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.
change_column_default :employees, :foreign, false
Pour Rails 4 + , utilisez change_column_default
_def change
change_column_default :table, :column, value
end
_
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
À 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 .
$ Rails generate migration add_columnname_to_tablename columnname:boolean
La commande ci-dessus va ajouter une nouvelle colonne dans votre tableau.
class AddColumnnameToTablename < ActiveRecord::Migration
def change
add_column :table_name, :column_name, :boolean, default: false
end
end
$ rake db:migrate
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