Nous avons une script/generate migration add_fieldname_to_tablename fieldname:datatype
syntaxe pour ajouter de nouvelles colonnes à un modèle.
Sur la même ligne, avons-nous un script / générer pour changer le type de données d'une colonne? Ou dois-je écrire SQL directement dans ma migration vanilla?
Je veux changer une colonne de datetime
en date
.
ruby-on-rails
migration
papdel
la source
la source
change
action habituelle par des actions distinctesup
etdown
, commechange_column
c'est une migration irréversible et générera une erreur si vous devez annuler.Vous pouvez également utiliser un bloc si vous avez plusieurs colonnes à modifier dans une table.
Exemple:
Voir la documentation de l' API sur la classe Table pour plus de détails.
la source
Je ne sais pas si vous pouvez créer une migration à partir de la ligne de commande pour faire tout cela, mais vous pouvez créer une nouvelle migration, puis modifier la migration pour effectuer cette prise.
Si tablename est le nom de votre table, fieldname est le nom de votre champ et que vous souhaitez passer d'une date / heure à une date, vous pouvez écrire une migration pour ce faire.
Vous pouvez créer une nouvelle migration avec:
Modifiez ensuite la migration pour utiliser change_table:
Exécutez ensuite la migration:
la source
Comme je l'ai constaté par les réponses précédentes, trois étapes sont nécessaires pour changer le type d'une colonne:
Étape 1:
Générez un nouveau fichier de migration à l'aide de ce code:
Étape 2:
Accédez au
/db/migrate
dossier et modifiez le fichier de migration que vous avez créé. Il existe deux solutions différentes.2.
Étape 3:
N'oubliez pas de faire cette commande:
J'ai testé cette solution pour Rails 4 et cela fonctionne bien.
la source
Avec Rails 5
Des guides Rails :
la source
Générez simplement la migration:
Mettre à jour la migration comme ceci:
et enfin
la source
Une autre façon de modifier le type de données à l'aide de la migration
étape 1: vous devez supprimer le nom du champ de type de données défectueux à l'aide de la migration
ex:
Ici, n'oubliez pas de spécifier le type de données pour votre champ
Étape 2: Maintenant, vous pouvez ajouter un champ avec le type de données correct
ex:
Voilà, maintenant votre table sera ajoutée avec le champ de type de données correct, codage rubis heureux !!
la source
Tout cela suppose que le type de données de la colonne a une conversion implicite pour toutes les données existantes. J'ai rencontré plusieurs situations où les données existantes, disons qu'un
String
peut être implicitement converti en nouveau type de données, disonsDate
.Dans cette situation, il est utile de savoir que vous pouvez créer des migrations avec des conversions de données. Personnellement, j'aime les mettre dans mon fichier modèle, puis les supprimer une fois que tous les schémas de base de données ont été migrés et sont stables.
la source
Pour compléter les réponses en cas de modification de la valeur par défaut :
Dans votre console de rails:
Dans la migration:
Ressemblera :
la source