Birincil anahtar değerlerinin tekrar 1'den başlamasını istiyorum.
Yanıtlar:
SQLite'da indeksi / birincil anahtarı sıfırlamak için şunu yazın:
$ rails console
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'yourtablename'")
ActiveRecord::Base.connection.execute("DELETE from 'yourtablename'")
alması durumunda, yaptım ve işe yaradı çünkü bana söyleyen bir hata sqlite_sequence where name = 'yourtablename' is not a valid table name
veya buna benzer bir şey verirdi .
Pek çok insan (benim gibi) tablodaki tüm verileri nasıl sileceğini bulmak için buraya geliyor. Hadi bakalım:
$ rails console
> ModelName.delete_all
veya
> ModelName.destroy_all
destroy_all bağımlılıkları ve geri aramaları denetler ve biraz daha uzun sürer. delete_all düz bir SQL sorgusudur.
Daha fazla bilgi burada: http://apidock.com/rails/ActiveRecord/Base/delete_all/class
Tablodaki her şeyi silmek ve ardından indeks sayacını sıfırlamak için rails konsolundan aşağıdakileri kullanıyorum (Ruby 2 & Rails 4):
> ModelName.delete_all
> ActiveRecord::Base.connection.reset_pk_sequence!('plural_model_name')
model_name
sıfırlama komutundaki sizin modelin tekil adı DEĞİL, tablonun gerçek adı gibi çoğul olması gerektiğidir.
ActiveRecord::Base.connection.reset_pk_sequence!(:plural_model_name)
.
Rails 4.2'den bu yana, truncate
doğrudan bir ActiveRecord bağlantısı üzerinde kullanabilirsiniz :
ActiveRecord::Base.connection.truncate(:table_name)
Bu, tüm verileri siler ve tablodaki otomatik artış sayaçlarını sıfırlar . MySQL ve Postgres İşleri, gelmez SQLite çalışır.
Ekle gem 'database_cleaner'
, senin Gemfile koşmak $ bundle install
sonra ve:
> DatabaseCleaner.clean_with(:truncation, :only => ['yourtablename'])
Daha fazla tablo belirtebilirsiniz:
> DatabaseCleaner.clean_with(:truncation, :only => ['table1', 'table2', 'table3'])
Son parametreyi dışarıda bırakırsanız, tüm veritabanını keser:
> DatabaseCleaner.clean_with(:truncation) # your database is truncated
Rails 4.2.0 ve Sqlite3 kullanıyorum
İşte benim için işe yarayan şey (yukarıdakilerin hepsinden biraz alarak):
$ rails c
> ModelName.delete_all
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'table_name'")
Daha sonra 1'den başlayan dizinle tabloma yeni kayıtlar ekleyebildim
Person.connection.execute('delete from people' )
Person.connection.execute("update sqlite_sequence set seq = 0 where name = 'People'" )