Rake tâche pour tronquer toutes les tables dans Rails 3
Je voudrais avoir une tâche rake pour tronquer toutes les tables. J'ai trouvé un sur internet, mais il est admis seulement pour les Rails 2 et ne fonctionne pas pour Rails 3 (le problème est d'obtenir une connexion de base de données).
rake db:reset
n'est pas une option, parce que je suis en utilisant PostgreSQL et il supprime en outre l'utilisateur. Par conséquent, la migration échoue. Je ne veux effacer les données.
Ne vous les gars ont somehting pour moi?
source d'informationauteur lzap
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé via google, et puis j'ai eu une solution beaucoup plus simple que celle qui a été approuvée, si elle est ici: Utiliser le database_cleaner gem. Voici les étapes.
Dans votre Gemfile (execute ensemble après la modification):
Avec cette gemme en place, la déclaration
DatabaseCleaner.clean_with :truncation
va tronquer la base de données. Ajoutant à une tâche rake est trivial:Que c'est. Vous pouvez également utiliser le
DatabaseCleaner.clean_with :truncation
ligne à l'intérieur de votredb/seeds.rb
fichier directement afin que vous n'oubliez pas de tronquer la base de données avant le semis.J'ai donc édité le lié exemple en ceci:
Cet exemple est basé sur Chris Ledet code du soufflet (merci) et travaille avec Rails 3.X.
Merci pour tous les conseils.
Selon Chris Ledet réponse, cela devient beaucoup plus simple:
Vous avez toujours la possibilité de migrer vers la version 0, comme suit:
De cette façon, vous n'avez même pas à tronquer vos tables, et vous pouvez ensuite migrer de nouveau. Le seul hic, c'est que vous avez besoin de votre
down
migrations pour fonctionner correctement.Cette solution ne travail dans rails 3, malgré le fait que les versions sont timestamp.
Cette solution est, comme on le voit ici: https://stackoverflow.com/a/1196822/241367
En outre, vous pouvez toujours exécuter le suivant, en supposant que votre
schema.rb
est jusqu'à ce jour:Et comme @kikito le suggère, vous pouvez exécuter
database_cleaner
(c'est ce quecucumber
etrspec
aiment à utiliser entre les tests) comme suit:Cela permet d'obtenir toutes les tables dans votre base de données, de trouver un modèle associé avec la table et composez #destroy_all.
La réponse donnée par lzap a un problème spécifique. Rails veut exécuter tous les migrations de nouveau. Le code suivant est suggéré par Anthony d'Alberto, et cela fonctionne. Cet ajout de vérifications avec les schema_migrations table