164 votes

Ajout : défaut => fidèle à boolean dans la colonne existante de Rails

J'ai vu à quelques questions (à savoir cette une) ici sur DONC sur l'ajout d'un booléen par défaut de la valeur à une colonne existante. J'ai donc essayé l' change_column suggestion, mais je ne dois pas le faire droit.

J'ai essayé:

$ change_column :profiles, :show_attribute, :boolean, :default => true

Qui renvoie -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 en :show_attribute sont restés nil. Dans la question que j'ai référencé ci-dessus il est dit dans PostgreSQL, vous devez mettre à jour manuellement. Depuis que je suis en utilisant PostgreSQL, j'ai ajouté le texte suivant dans mon create_profiles migration:

t.boolean :show_attribute, :default => true

Quelqu'un peut-il me dire ce que je fais mal?

322voto

Robin Points 10884

change_column est une méthode de ActiveRecord::Migration, de sorte que vous ne peut pas appeler cela comme ça dans la console.

Si vous souhaitez ajouter une valeur par défaut pour cette colonne, créer une nouvelle migration:

rails g migration add_default_value_to_show_attribute

Puis dans la migration de création:

def up
  change_column :profiles, :show_attribute, :boolean, :default => true
end

def down
  change_column :profiles, :show_attribute, :boolean, :default => nil
end

Ensuite, exécutez rake db:migrate.

Il ne va rien changer à la déjà créé des dossiers. Pour cela, vous devez créer un rake task ou tout simplement aller dans l' rails console et de mettre à jour tous les enregistrements.

Lorsque vous avez ajouté t.boolean :show_attribute, :default => true de la create_profiles de la migration, il est normal si il n'a rien fait. Seulement les migrations qui n'ont pas déjà été lancés sont exécutées. Si vous avez commencé avec une nouvelle base de données, puis de fixer la valeur par défaut est true.

96voto

Sebastiaan Pouyet Points 406

Comme une variation sur la réponse acceptée, vous pouvez également utiliser la `` méthode dans vos migrations :

Rails API-docs

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