Salut Edouard,
Mais aujourd’hui je
veux faire une version 2 de cette migration (et oui je me
rajoute une table ! :p), mais je n’arrive pas à obtenir un fichier
db/migrate/002_add_a_new_table.rb et j’ai le message
suivant :
exists db/migrate
Another migration is already named add_a_new_table:
db/migrate/001_add_a_new_table.rb
Ce n’est pas possible d’avoir 2 migrations avec le même
nom, car à ta migration add_a_new_table, va correspondre
le nom camélisé AddANewTable qui va être le nom de ta
classe fille de AR::Migration.
Donc on a intérêt à :
- limiter si possible le nbre de migrations car “ça pollue
l’espace des noms” (ie alter_users_table n’est dispo qu’une
fois)
- à éviter des noms génériques : create_a_new_table,
mais privilégier des noms plus précis :
add_position_column_to_categories_table
Comment faire svp pour que je puisse créer une
version 2 de mon script de migration ?
enfin tout dépend si ton appli rails est sous SCM ou
non.
1/ Si oui, il faut bien réfléchir avant de commiter,
vérifier si ça migration marche, si on peut pas l’améliorer,
(pour éviter d’avoir à rajouter une colonne à une table que
l’on vient de créer lors de la précédente migration).
2/ Si non, et si ça ne pose pas de pb de revenir tout au
début (appli en tout début de construction, aucunes données,
on bidouille), autant recommencer la première migration que
j’appelle généralement initial_schema.
Ainsi dans ton cas, tu peux revenir à la version 0
rake db:migrate VERSION=0
rajouter la création de ta table dans le fichier de migration 1
(que j’appelle 001_initial_schema.rb pour ma part)
remigrer en version 1.
Certains préfèrent peut être séparer les créations de table
dans des migrations uniques.
Mais je préfère l’optique, une grosse migration en 1 (Ã
la place d’une dizaine de migrations table/table) et
on peaufine dans les migrations après.
Un des inconvénients, c’est qu’on perd la génération automatique
de la migration lors du script/generate model.
Pour l’instant je parle du début du codage de ton appli,
où rien n’est encore livré, ni dispo pour le reste de l’équipe
ou pour le public.
-- Jean-François.