Je veux que les valeurs de clé primaire recommencent à partir de 1.
ruby-on-rails
yukas
la source
la source
Person.connection.execute('delete from people' )
Person.connection.execute("update sqlite_sequence set seq = 0 where name = 'People'" )
ActiveRecord::Base.connection.execute("DELETE from 'yourtablename'")
et cela a fonctionné parce que cela me donnerait une erreur qui disaitsqlite_sequence where name = 'yourtablename' is not a valid table name
ou quelque chose comme ça.Beaucoup de gens (comme moi) viennent ici pour trouver comment supprimer toutes les données du tableau. Voici:
$ rails console > ModelName.delete_all
ou
> ModelName.destroy_all
destroy_all vérifie les dépendances et les rappels, et prend un peu plus de temps. delete_all est une requête SQL directe.
Plus d'informations ici: http://apidock.com/rails/ActiveRecord/Base/delete_all/class
la source
J'ai utilisé ce qui suit à partir de la console des rails pour supprimer tout ce qui se trouve dans la table, puis réinitialiser le compteur d'index (Ruby 2 et Rails 4):
> ModelName.delete_all > ActiveRecord::Base.connection.reset_pk_sequence!('plural_model_name')
la source
model_name
commande de réinitialisation doit être au pluriel, comme le nom réel de la table PAS le nom singulier du modèle.ActiveRecord::Base.connection.reset_pk_sequence!(:plural_model_name)
.Le lien de @ khelll est utile. La commande que vous souhaitez tronquer une table est:
ActiveRecord::Base.connection.execute("TRUNCATE #{table_name}")
la source
Depuis Rails 4.2, vous pouvez utiliser
truncate
directement sur une connexion ActiveRecord :ActiveRecord::Base.connection.truncate(:table_name)
Cela efface toutes les données et réinitialise les compteurs d'auto-incrémentation dans la table. Fonctionne dans MySQL et Postgres, ne fonctionne pas dans Sqlite.
la source
Ajoutez
gem 'database_cleaner'
à votre Gemfile, exécutez$ bundle install
, puis:> DatabaseCleaner.clean_with(:truncation, :only => ['yourtablename'])
Vous pouvez spécifier plus de tables:
> DatabaseCleaner.clean_with(:truncation, :only => ['table1', 'table2', 'table3'])
Si vous laissez le dernier paramètre de côté, il tronquera toute la base de données:
> DatabaseCleaner.clean_with(:truncation) # your database is truncated
la source
J'utilise Rails 4.2.0 et Sqlite3
Voici 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'ai ensuite pu ajouter de nouveaux enregistrements à ma table avec l'index commençant à 1
la source
Pour quiconque cherche la réponse à cette question lorsque la base de données est Postgres, vous pouvez le faire depuis la console Rails:
rails console irb(main):028:0> ActiveRecord::Base.connection.execute("SELECT SETVAL('accounts_id_seq', 1)")
Où le
accounts
dans leaccounts_id_seq
est le nom de la table.la source