J'ai vu quelques questions (à savoir celle-ci ) ici sur SO sur l'ajout d'une valeur booléenne par défaut à une colonne existante. J'ai donc essayé la change_column
suggestion mais je ne dois pas le faire correctement.
J'ai essayé:
$ change_column :profiles, :show_attribute, :boolean, :default => true
Quels retours -bash: change_column: command not found
J'ai ensuite couru:
$ rails g change_column :profiles, :show_attribute, :boolean, :default => true
...et
$ rails change_column :profiles, :show_attribute, :boolean, :default => true
Puis a couru rake db:migrate
, mais la valeur pour :show_attribute
est restée nil
. Dans la question que j'ai mentionnée ci-dessus, il est dit que dans PostgreSQL, vous devez le mettre à jour manuellement. Depuis que j'utilise PostgreSQL, j'ai ajouté ce qui suit dans ma create_profiles
migration:
t.boolean :show_attribute, :default => true
Quelqu'un peut-il me dire ce que je fais de mal ici?
la source
up
méthode de la migration, qui est une nouvelle classe qui sera générée dans db / migrate /. (Ladown
méthode doit être écrite pour annuler ce quiup
fait.) Faites ce changement, alorsrake db:migrate
.def self.up
etdef self.down
show
ou quel que soit le nom de la colonne.Comme variante de la réponse acceptée, vous pouvez également utiliser la
change_column_default
méthode dans vos migrations:Documentation sur l'API Rails
la source
show
ou quel que soit le nom de la colonne.show_attribute
est le nom de la colonne, je ne pense pas que rails 5 ait quoi que ce soit à voir avec ça, non?Je ne sais pas quand cela a été écrit, mais actuellement pour ajouter ou supprimer une valeur par défaut d'une colonne dans une migration, vous pouvez utiliser ce qui suit:
Rails 5:
http://edgeguides.rubyonrails.org/active_record_migrations.html#changing-columns
Rails 4.2:
http://guides.rubyonrails.org/v4.2/active_record_migrations.html#changing-columns
Ce qui est un bon moyen d'éviter de parcourir vos migrations ou votre schéma pour les spécifications de colonne.
la source
null: false
etdefault: :something
fondamentalementAussi, selon le doc:
https://guides.rubyonrails.org/active_record_migrations.html
Il n'y a donc pas de générateur de rails prêt à l'emploi. Comme spécifié par les réponses ci-dessus, vous devez remplir manuellement votre fichier de migration avec la
change_column_default
méthode.Vous pouvez créer votre propre générateur: https://guides.rubyonrails.org/generators.html
la source
Si vous venez d'effectuer une migration, vous pouvez revenir en arrière, puis effectuer à nouveau votre migration.
Pour revenir en arrière, vous pouvez effectuer autant d'étapes que vous le souhaitez:
Ou, si vous utilisez Rails 5.2 ou plus récent:
Ensuite, vous pouvez simplement refaire la migration:
N'oubliez pas
rake db:migrate
et si vous utilisez herokuheroku run rake db:migrate
la source
Semble être le meilleur moyen d'ajouter une valeur par défaut à une colonne existante qui ne l'a pas
null: false
déjà.Autrement:
Quelques recherches que j'ai faites à ce sujet:
https://gist.github.com/Dorian/417b9a0e1a4e09a558c39345d50c8c3b
la source
Si vous ne souhaitez pas créer un autre fichier de migration pour une petite modification récente - à partir de Rails Console:
Puis quittez et entrez à nouveau dans la console des rails, ainsi les changements de base de données seront appliqués. Ensuite, si vous faites cela ...
Vous devriez voir la valeur par défaut "show_attribute" comme true.
Pour les enregistrements existants, si vous souhaitez conserver les paramètres "faux" existants et ne mettre à jour que les valeurs "nil" avec votre nouvelle valeur par défaut:
Mettez à jour la migration qui a créé cette table, de sorte que toutes les futures versions de la base de données l'obtiennent dès le début. Exécutez également le même processus sur toutes les instances déployées de la base de données.
Si vous utilisez la méthode "new db migration", vous pouvez effectuer la mise à jour des valeurs nulles existantes dans cette migration.
la source