Rails 4 migration: comment réorganiser les colonnes

J'ai appris que add_column a un :after option pour définir l'emplacement de la colonne est insérée. Dommage que j'ai appris à ce sujet :après l'ajout d'un tas.

Comment puis-je écrire une migration simplement réorganiser les colonnes?

  • Vous pourriez vous débarrasser de la Base de données pour enregistrer les Données ; re-commander votre Schéma.rb pour mettre les horodatages des colonnes à la fin de la create_table du bloc ; exécuter rake db:drop db:create db:migrate et puis re-importer vos Données
  • Maintenant, c'est une fonctionnalité non documentée : Vous avez à lire la base de sources pour le trouver. Juste pour la référence, je l'ai vérifié rename_column code : il n'offre pas cette fonctionnalité (désolé, ça n'aide pas).
  • Utiliser SQL de migration. stackoverflow.com/questions/4095481/...
  • Ce n'est pas une mauvaise idée. Pourriez-vous vous présenter comme une réponse, de préférence avec un peu de code pour afficher la syntaxe pour l'exécution de raw MySQL dans une migration.
  • Je viens de remarquer une autre réponse, mais Stefan montre une belle façon de le faire sans SQL..
  • Cela n'a pas fonctionné pour moi. Le rake commandes de réorganiser les colonnes, c'est correct. Mais quand je me suis ré-importer mes données existantes à l'aide d'un dump SQL de l'ordre de tri des colonnes se foiré à nouveau.
  • Bon point, sauf que vous ne devez pas modifier le schema.rb directement. Créer une migration à la place. Je cite ici les rails de la documentation sur schema.rb [rails 5.1]: "Ce fichier est généré automatiquement à partir de l'état actuel de la base de données. Au lieu de modifier ce fichier, veuillez utiliser les migrations fonction d'Active Record". Donc: 1/ effacer pertinentes migrations 2/ run rake db:drop db:create (elle va vider la schema.rb), 3/ créer une migration, 4/ le modifier pour ajouter les colonnes dans l'ordre, puis 5/ exécuter avec rake db:migrate. Il a travaillé pour moi.

InformationsquelleAutor emersonthis | 2013-09-19