Ruby on Rails uygulamasında veritabanı tablolarımdan birindeki tüm kayıtları nasıl silerim?
Ruby on Rails uygulamasında veritabanı tablolarımdan birindeki tüm kayıtları nasıl silerim?
Yanıtlar:
SQL olmadan bir yol arıyorsanız delete_all kullanabilmelisiniz.
Post.delete_all
veya bir kriterle
Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"
Daha fazla bilgi için buraya bakın .
Kayıtlar önce yüklenmeden silinir, bu da onu çok hızlı yapar, ancak silme sırasında çalıştırılacak ray koduna bağlı olan sayaç önbelleği gibi işlevselliği bozar.
ActiveRecord
model olmayan tablolara sahip olmasının mümkün olduğunu söylüyorum . Soru, bir 'tablodan' kayıt silme hakkında soruyor ve ben sadece işaret ediyorum veya cevapta tutulan varsayımı.
Tüm modellerin her bir örneğini silmek istiyorsan, şunu kullanırım
ActiveRecord::Base.connection.tables.map(&:classify)
.map{|name| name.constantize if Object.const_defined?(name)}
.compact.each(&:delete_all)
select
Bir bloğun içinde bir if ifadesi kullanmanız gerektiğinde tercih edin, bu şekilde sıfır öğeleri kaldırmak için kompakt yöntemi zincirlemek zorunda kalmazsınız.
BlogPost.find_each(&:destroy)
Modelinizin adı BlogPost ise, şu olur:
BlogPost.all.map(&:destroy)
MOPED: 127.0.0.1:27017 QUERY database=a_database collection=nothings selector={} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.3378ms)
Her tablodaki her girişi silmek istemeniz durumunda daha yeni cevap:
def reset
Rails.application.eager_load!
ActiveRecord::Base.descendants.each { |c| c.delete_all unless c == ActiveRecord::SchemaMigration }
end
Burada hakkında daha fazla bilgieager_load
.
Onu aradıktan sonra, tüm torunlarına erişebilir ActiveRecord::Base
ve birdelete_all
ve tüm modellere .
SchemaMigration tablosunu temizlemediğimizden emin olduğumuzu unutmayın.