Je venais juste d'installer devise donc la table n'avait aucune donnée dessus sauf un utilisateur (moi).
Je refaisais la base de données une fois de plus, alors j'ai tout abandonné. J'ai fait Rails g scaffold
pour générer 6 nouveaux modèles et contrôleurs et rake db:migrate
Dans mon /db/migrate
répertoire J'ai le fichier de devise avec le nom de fichier 20130603211907_devise_create_users.rb
Voici le problème: si je le fais rake db:migrate:down VERSION=20130603211907
il supprimera toutes les nouvelles migrations.
Comment exécuter à nouveau une migration, sans supprimer toutes les migrations les plus récentes?
Si vous développez localement et que cela ne ferait pas de mal de supprimer toutes les données de vos modèles, vous pouvez simplement drop
votre db puis create
& migrate
à partir de zéro:
Il exécutera la descente puis la montée (Cette commande peut supprimer votre table!):
rake db:migrate:redo VERSION=xxxxxxx
Pour empêcher la suppression de votre table, vous pouvez le faire en conjonction avec commenter l'étape down
temporairement.
Merci à tous pour l'aide. C'est ce qui a fonctionné pour moi:
ATTENTION: ces commandes vont supprimer toutes les données de votre base de données!
rake db:drop
rake db:create
rake db:migrate
Tu peux appeler rake db:migrate:redo VERSION=20130603211907
qui réexécutera la version spécifiée.
De plus, si vous avez des migrations qui ne doivent s'exécuter que lors de la montée de la chaîne de migration (par exemple, transformation des données, copie, etc.), vous pouvez spécifier un
def up
do_something
end
et def down (descendant), def change (dans les deux sens) respectivement.
Pour désactiver temporairement les migrations, renommez simplement, par exemple, la méthode def up
à def up_
et il sera ignoré lors du traitement de la chaîne de migration.
rake db:migrate:up VERSION=20090408054532
cela fera migrer tous les fichiers jusqu'à VERSION = 20090408054532