Je veux que les valeurs de clé primaire commencent à nouveau à partir de 1.Comment réinitialiser une seule table dans les rails?
Répondre
Pour réinitialiser l'index/clé primaire dans SQLite il suffit de taper:
$ rails console
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'yourtablename'")
s'inspirant de votre réponse ... 'Person.connection.execute ('delete from people')' 'Person.connection.execute (" mise à jour sqlite_sequence set seq = 0 où nom = 'People' ")' – mamesaye
Si quelqu'un a essayé ceci et a eu une erreur, j'ai fait 'ActiveRecord :: Base.connection.execute (" DELETE de 'votretable' '') '' et cela a fonctionné parce que cela me donnerait une erreur dit 'sqlite_sequence où name = 'yourtablename' n'est pas un nom de table valide» ou quelque chose comme ça. – l1zZY
Je ne pense pas que vous pouvez le faire. Cependant, vous pouvez write your own rake task
Pour votre information, vous pouvez obtenir la liste des tâches de rake disponibles en faisant:
rake --tasks
Vous obtiendrez quelque chose comme:
rake backups:clear # Cleanup Backup files
rake clear # Cleanup temporary, log and backup files
rake db:fixtures:load # Load fixtures into the current environment's database. Load specific fixtures using FIXTURES=x,y
rake db:migrate # Migrate the database through scripts in db/migrate. Target specific version with VERSION=x
rake db:schema:dump # Create a db/schema.rb file that can be portably used against any DB supported by AR
rake db:schema:load # Load a schema.rb file into the database
rake db:sessions:clear # Clear the sessions table
rake db:sessions:create # Creates a sessions table for use with CGI::Session::ActiveRecordStore
rake db:structure:dump # Dump the database structure to a SQL file
rake db:test:clone # Recreate the test database from the current environment's database schema
rake db:test:clone_structure # Recreate the test databases from the development structure
rake db:test:prepare # Prepare the test database and load the schema
rake db:test:purge # Empty the test database
rake doc:app # Build the app HTML Files
rake doc:clobber_app # Remove rdoc products
rake doc:clobber_plugins # Remove plugin documentation
rake doc:clobber_rails # Remove rdoc products
rake doc:plugins # Generate documation for all installed plugins
rake doc:rails # Build the rails HTML Files
rake doc:reapp # Force a rebuild of the RDOC files
rake doc:rerails # Force a rebuild of the RDOC files
rake log:clear # Truncates all *.log files in log/ to zero bytes
rake rails:freeze:edge # Lock to latest Edge Rails or a specific revision with REVISION=X (ex: REVISION=4021) or a tag with TAG=Y (ex: TAG=rel_1-1-0)
rake rails:freeze:gems # Lock this application to the current gems (by unpacking them into vendor/rails)
rake rails:unfreeze # Unlock this application from freeze of gems or edge and return to a fluid use of system gems
rake rails:update # Update both configs, scripts and public/javascripts from Rails
rake rails:update:configs # Update config/boot.rb from your current rails install
rake rails:update:javascripts # Update your javascripts from your current rails install
rake rails:update:scripts # Add new scripts to the application script/ directory
rake stats # Report code statistics (KLOCs, etc) from the application
rake test # Test all units and functionals
rake test:functionals # Run the functional tests in test/functional
rake test:integration # Run the integration tests in test/integration
rake test:plugins # Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)
rake test:recent # Test recent changes
rake test:uncommitted # Test changes since last checkin (only Subversion)
rake test:units # Run the unit tests in test/unit
rake tmp:assets:clear # Clears all files in tmp/test/assets
rake tmp:cache:clear # Clears all files and directories in tmp/cache
rake tmp:clear # Clear session, cache, and socket files from tmp/
rake tmp:create # Creates tmp directories for sessions, cache, and sockets
rake tmp:pids:clear # Clears all files in tmp/pids
rake tmp:sessions:clear # Clears all files in tmp/sessions
rake tmp:sockets:clear # Clears all files in tmp/sockets
Cette option a été sélectionnée comme meilleure réponse, mais elle ne répond pas vraiment à la question. @OP, comment l'avez-vous fait? – CharlieMezak
Jetez un coup d'oeil here, vous pourriez encore avoir besoin d'une petite personnalisation pour tronquer une table spécifique.
Beaucoup de gens (comme moi) viennent ici pour trouver comment supprimer toutes les données de la table. Ici, vous allez:
$ rails console
> ModelName.delete_all
ou
> ModelName.destroy_all
destroy_all vérifie les dépendances et les callbacks, et prend un peu plus longtemps. delete_all est une requête SQL directe.
Plus d'infos ici: http://apidock.com/rails/ActiveRecord/Base/delete_all/class
Cette solution réinitialise les entrées de la table, mais pas la clé primaire. –
Ouais c'est génial - mais je veux réinitialiser l'index! Ni delete_all ni destroy_all ne réinitialise l'index à 1. –
Ceci n'est pas la réponse à la question. Pourquoi a-t-il reçu autant de votes? >< –
@ lien de khelll est utile. La commande que vous voulez tronquer une table est:
ActiveRecord::Base.connection.execute("TRUNCATE #{table_name}")
Ne semble pas fonctionner sur Rails 4 – Epigene
Ajouter gem 'database_cleaner'
à votre Gemfile, exécutez $ bundle install
, puis:
> DatabaseCleaner.clean_with(:truncation, :only => ['yourtablename'])
Vous pouvez spécifier plusieurs tables:
> DatabaseCleaner.clean_with(:truncation, :only => ['table1', 'table2', 'table3'])
Si vous quittez le dernier paramètre sur, il tronque la base de données entière:
> DatabaseCleaner.clean_with(:truncation) # your database is truncated
Parfait, merci. C'est la seule chose qui a fonctionné pour moi dans Sqlite. –
Pour quelqu'un d'autre à la recherche de la réponse à cette question lorsque la base de données est Postgres, vous pouvez le faire à partir de la console Rails:
rails console
irb(main):028:0> ActiveRecord::Base.connection.execute("SELECT SETVAL('accounts_id_seq', 1)")
Lorsque le accounts
dans le accounts_id_seq
est le nom de la table.
Je me sers de la console de rails comme suit pour supprimer tout dans le tableau, puis remettre le compteur d'index (Ruby Rails 2 & 4):
> ModelName.delete_all
> ActiveRecord::Base.connection.reset_pk_sequence!('plural_model_name')
fonctionne seulement avec postgreSQL – achabacha322
Cela a très bien fonctionné pour moi, mais un petit détail est que votre 'model_name' dans la commande de réinitialisation doit pluriel, comme le nom réel de la table PAS le nom singulier du modèle. –
J'utilise Rails 4.2.0 et Sqlite3
est ici ce qui a fonctionné pour moi (en prenant un peu de tout ce qui précède):
$ rails c
> ModelName.delete_all
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'table_name'")
j'étais alors en mesure d'ajouter de nouveaux enregistrements à ma table avec l'index de départ de retour à 1
Depuis Rails 4.2, vous pouvez utiliser truncate
directement sur un ActiveRecord connection:
ActiveRecord::Base.connection.truncate(:table_name)
Ce efface toutes les données et réinitialise les compteurs d'auto-incrustation dans le tableau. Fonctionne dans MySQL et Postgres, ne fonctionne pas dans Sqlite.
- 1. Filtrer une table dans les rails
- 2. Créer une seule table dans mysql en lecture seule
- 3. Une seule instance d'un modèle dans Rails
- 4. Répliquer une seule table
- 5. MySQL SUPPRIMER dans une seule table
- 6. Comment insérer dans une table avec une seule colonne IDENTITY
- 7. Comment réinitialiser une propriété dans ANT?
- 8. Comment mettre à jour une seule table dans Oracle?
- 9. Comment réinitialiser un tabcontoller avec une vue de table détaillée?
- 10. Comment créer une table en lecture seule dans SQL Server?
- 11. Comment mélanger deux modèles de rails en une seule recherche?
- 12. Joindre plusieurs colonnes dans une table à une seule colonne dans une autre table
- 13. Condition sur une sous-table dans les rails
- 14. Dans Oracle, comment sélectionner plusieurs valeurs d'une table liée et les stocker dans une seule colonne?
- 15. Comment trier les lignes dans un formulaire d'objet imbriqué dans des rails pour une seule vue?
- 16. Comment réinitialiser ou réinitialiser les propriétés d'une classe?
- 17. Afficher le résultat sur une seule table
- 18. Un drapeau par défaut sur une table dans les rails
- 19. Impression d'une table dans les rails
- 20. Ruby on Rails: Concombre: comment faire une seule fonction?
- 21. L'ensemble de données contient une seule table
- 22. Rapports sur une seule table SQL
- 23. Sauvegardes quotidiennes pour une seule table dans Microsoft SQL Server
- 24. Comment réinitialiser table.DefaultView.RowFilter?
- 25. MySQL: Y at-il un moyen de réinitialiser une table?
- 26. agrégats combinés en une seule table SQL
- 27. NHibernate: Comment mapper les enfants de plusieurs parents d'un type commun dans une seule table?
- 28. Hibernate: Relation parent/enfant dans une seule table
- 29. Comment utilisez-vous plusieurs champs de formulaire pour interagir avec une seule méthode dans les rails?
- 30. Comment créer et utiliser une table de jonction dans Rails?
Que voulez-vous dire par «nettoyer? – khelll
Probablement, je veux dire réinitialiser. – yukas
Que voulez-vous dire par «réinitialiser»? Supprimer toutes les données dedans? –