191 votes

Rails de migrations : annuler le réglage par défaut pour une colonne

J'ai le problème, que j'ai une migration dans les Rails qui définit un paramètre par défaut pour une colonne, comme dans cet exemple:

def self.up
  add_column :column_name, :bought_at, :datetime, :default => Time.now
end

Supposons que, j'aime à la baisse que les paramètres par défaut dans une version ultérieure de la migration, comment dois-je faire avec l'aide de rails de migrations?

Ma solution actuelle est l'exécution d'une coutume commande sql dans les rails de la migration, comme ceci:

def self.up
  execute 'alter table column_name alter bought_at drop default'
end

Mais je n'aime pas cette approche, parce que je suis maintenant dépend de la façon dont le sous-jacent de la base de données est l'interprétation de cette commande. En cas de changement de la base de données cette requête peut-être pourriez ne fonctionne plus et la migration serait rompu. Alors, est-il une façon d'exprimer l'annulation d'un réglage par défaut pour une colonne dans les rails?

387voto

mutewinter Points 3260

``travaille également à abandonner complètement les valeur par défaut de la colonne. Inutile d’utiliser exécuter.

23voto

Serx Points 1158

Des sons comme vous êtes en train de faire la bonne chose avec votre 'exécuter', comme les docs point:

change_column_default(table_name, column_name, default)

Définit une nouvelle valeur par défaut pour une colonne. Si vous souhaitez définir la valeur par défaut NULL, vous êtes hors de la chance. Vous avez besoin pour DatabaseStatements#exécuter la approprié de SQL vous-même. Exemples

change_column_default(:suppliers, :qualification, 'new')
change_column_default(:accounts, :authorized, 1)

14voto

dadooda Points 506

L’extrait suivant, j’utilise pour faire les colonnes , mais sauter `` au niveau du schéma :

-3voto

Lesly Revenge Points 170

Rails 4

change_column : cours, : nom, : string, limiter : 100, null : faux

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