Saya ingin nilai kunci utama dimulai dari 1 lagi.
ruby-on-rails
yukas
sumber
sumber
Untuk mengatur ulang indeks / kunci utama di SQLite cukup ketik:
$ rails console
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'yourtablename'")
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'")
dan itu berhasil karena itu akan memberi saya kesalahan yang mengatakansqlite_sequence where name = 'yourtablename' is not a valid table name
atau sesuatu seperti itu.Banyak orang (seperti saya) datang ke sini untuk mencari cara menghapus semua data di tabel. Ini dia:
$ rails console > ModelName.delete_all
atau
> ModelName.destroy_all
destroy_all memeriksa dependensi dan callback, dan membutuhkan waktu lebih lama. delete_all adalah kueri SQL langsung.
Info lebih lanjut di sini: http://apidock.com/rails/ActiveRecord/Base/delete_all/class
sumber
Saya telah menggunakan perintah berikut dari rails console untuk menghapus semua yang ada di tabel dan kemudian mengatur ulang penghitung indeks (Ruby 2 & Rails 4):
> ModelName.delete_all > ActiveRecord::Base.connection.reset_pk_sequence!('plural_model_name')
sumber
model_name
perintah reset Anda harus jamak, seperti nama sebenarnya dari tabel BUKAN nama tunggal model.ActiveRecord::Base.connection.reset_pk_sequence!(:plural_model_name)
.Tautan @ khelll sangat membantu. Perintah yang ingin Anda potong satu tabel adalah:
ActiveRecord::Base.connection.execute("TRUNCATE #{table_name}")
sumber
Sejak Rails 4.2 Anda dapat menggunakan
truncate
secara langsung pada koneksi ActiveRecord :ActiveRecord::Base.connection.truncate(:table_name)
Ini akan menghapus semua data dan menyetel ulang penghitung kenaikan otomatis di tabel. Bekerja di MySQL dan Postgres, tidak berfungsi di Sqlite.
sumber
Tambahkan
gem 'database_cleaner'
ke Gemfile Anda, jalankan$ bundle install
, lalu:> DatabaseCleaner.clean_with(:truncation, :only => ['yourtablename'])
Anda dapat menentukan lebih banyak tabel:
> DatabaseCleaner.clean_with(:truncation, :only => ['table1', 'table2', 'table3'])
Jika Anda meninggalkan parameter terakhir, itu akan memotong seluruh database:
> DatabaseCleaner.clean_with(:truncation) # your database is truncated
sumber
Saya menggunakan Rails 4.2.0 dan Sqlite3
Inilah yang berhasil untuk saya (mengambil sedikit dari semua hal di atas):
$ rails c > ModelName.delete_all > ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'table_name'")
Saya kemudian dapat menambahkan catatan baru ke tabel saya dengan indeks mulai dari 1
sumber
Bagi siapa pun yang mencari jawaban untuk pertanyaan ini ketika database-nya adalah Postgres, Anda dapat melakukan ini dari konsol Rails:
rails console irb(main):028:0> ActiveRecord::Base.connection.execute("SELECT SETVAL('accounts_id_seq', 1)")
Dimana
accounts
di dalamaccounts_id_seq
adalah nama tabel.sumber