Comment ajouter une valeur par défaut à une colonne qui existe déjà via 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 existe.
Comment ajouter une valeur par défaut à une colonne qui existe déjà via 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 existe.
Voici comment procéder:
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, alors assurez-vous de mettre à jour le champ de manière correcte lors de la migration.
up
bloc plutôt que dans unchange
bloc. Vous pouvez laisser ledown
bloc vide. Il ne ramènera pas la table à son état d'origine, mais la migration peut être annulée.la source
from:
etto:
si vous voulez qu'il soit réversible :)from
et ato
été ajouté dans Rails 5+ dans ce commit: github.com/rails/rails/pull/20018/filesPour Rails 4+ , utilisez
change_column_default
la source
def change
`add_column: foos,: name, default:" quelque chose pour les valeurs existantes "` `change_column_default: foos,: name, default:" "`end
change_column_default :products, :approved, from: true, to: false
- mais cela ne fonctionne pas aussi.En utilisant des
def change
moyens, vous devez écrire des migrations réversibles. Etchange_column
n'est pas réversible. Vous pouvez monter mais pas descendre carchange_column
c'est irréversible.Au lieu de cela, bien qu'il puisse s'agir de quelques lignes supplémentaires, vous devez utiliser
def up
etdef down
Donc, si vous avez une colonne sans valeur par défaut, vous devez le faire pour ajouter une valeur par défaut.
Ou si vous souhaitez modifier la valeur par défaut d'une colonne existante.
la source
** 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 ajoutent une nouvelle colonne à une table existante avec la valeur par défaut true ou false.
1. Exécutez la migration depuis la ligne de commande pour ajouter la nouvelle colonne
La commande ci-dessus ajoutera une nouvelle colonne dans votre table.
2. Définissez la nouvelle valeur de colonne sur VRAI / FAUX en modifiant le nouveau fichier de migration créé.
** 3. Pour effectuer les modifications dans votre table de base de données d'application, exécutez la commande suivante dans le terminal **
la source
Exécuter:
Il va générer cette migration:
Définissez la valeur par défaut en ajoutant: default => 1
Courir:
la source
Key is not present in table error
.Voici ce que vous pouvez faire:
EDIT: ... mais apparemment, c'est une erreur Rookie!
la source
before_save