Réponses:
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.
change_column_default :employees, :foreign, false
from:
et to:
si vous voulez qu'il soit réversible :)
from
et a to
été ajouté dans Rails 5+ dans ce commit: github.com/rails/rails/pull/20018/files
Pour Rails 4+ , utilisezchange_column_default
def change
change_column_default :table, :column, value
end
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. Et change_column
n'est pas réversible. Vous pouvez monter mais pas descendre car change_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.
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 ajoutent 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 ajoutera une nouvelle colonne dans votre table.
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
Il 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
Key is not present in table error
.
Voici ce que vous pouvez faire:
class Profile < ActiveRecord::Base
before_save :set_default_val
def set_default_val
self.send_updates = 'val' unless self.send_updates
end
end
EDIT: ... mais apparemment, c'est une erreur Rookie!
before_save
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.