vendredi 1 octobre 2010

Ajouter une colonne à une table

Une fois le modèle de données et le model (de MVC) effectivement créés dans une application rails, on pourrait se demander comment ajouter une colonne à une table sans "tout casser". Il y a plusieurs méthodes : la première serait d'envoyer un alter table à la base de données. Rails étant awesome, il va se rendre compte que le schéma a changé et donc va adapter le model (de MVC).

Une meilleure solution est de créer une migration :
rails generate migration add_<column>_to_<type> 


Cette commande va ajouter un fichier dans /db/migrate. Il va contenir deux méthodes : up et down.

Up contient le code pour ajouter cette colonne :
add_column : <table>, :<column>, :<type>


Down contient le code pour faire un rollback sur cette migration précise :
remove_column : <table>, :<column> 


Ainsi une trace des modifications de la base de données est sauvegardée. Cela a beaucoup d'avantages. Le principal étant pour le travail en équipe ; si une colonne est ajoutée sans fichier migrate, alors un autre développeur qui va récupérer l'application ne saura pas quoi faire. Avec cette solution, un simple db:migrate va mettre à jour sa base locale de développement.

Remarque : dans les deux cas, les vues ne sont pas mises à jour. Par exemple, un formulaire de création construit avec scaffolding ne va pas ajouter une ligne pour le nouveau champ en base, idem pour les tableaux. Il n'y a aucun impacts sur le controller.

Aucun commentaire:

Enregistrer un commentaire