J'ai le problème, que j'ai une migration dans Rails qui configure un paramètre par défaut pour une colonne, comme cet exemple:
def self.up
add_column :column_name, :bought_at, :datetime, :default => Time.now
end
Supposons que j'aime supprimer ces paramètres par défaut lors d'une migration ultérieure, comment puis-je faire cela avec l'utilisation de migrations de rails?
Ma solution de contournement actuelle est l'exécution d'une commande sql personnalisée dans la migration des rails, comme ceci:
def self.up
execute 'alter table column_name alter bought_at drop default'
end
Mais je n'aime pas cette approche, car je dépend maintenant de la façon dont la base de données sous-jacente interprète cette commande. En cas de modification de la base de données, cette requête pourrait ne plus fonctionner et la migration serait interrompue. Alors, existe-t-il un moyen d'exprimer l'annulation d'un paramètre par défaut pour une colonne dans les rails?
la source
CHARACTER VARYING
colonnes, définissez-la simplement surNULL::character varying
.change_column_default(:table_name, :column_name, from: nil, to: false)
ALTER TABLE table_name ALTER COLUMN type DROP DEFAULT
, pas besoin de le réglerNULL
je pense.On dirait que vous faites la bonne chose avec votre 'exécution', comme le soulignent les documents:
la source
L'extrait suivant que j'utilise pour créer des
NULL
colonnesNOT NULL
, mais ignorerDEFAULT
au niveau du schéma:la source
Rails 4
la source