Jak usunąć wszystkie rekordy w jednej z moich tabel bazy danych w aplikacji Ruby on Rails?
ruby-on-rails
ruby
database
ruby-on-rails-3
Justin Meltzer
źródło
źródło
ActiveRecord
modelami. Pytanie dotyczy usunięcia rekordu z „tabeli”, a ja tylko wskazuję lub założenie zawarte w odpowiedzi.Aby usunąć przez SQL
Item.delete_all # accepts optional conditions
Aby usunąć, wywołując metodę zniszczenia każdego modelu (kosztowna, ale zapewnia wywołanie zwrotne)
Item.destroy_all # accepts optional conditions
Wszystko tutaj
źródło
jeśli chcesz całkowicie opróżnić bazę danych, a nie tylko usunąć model lub modele do niej dołączone, możesz:
rake db:purge
możesz to również zrobić w testowej bazie danych
rake db:test:purge
źródło
Jeśli masz na myśli usunięcie każdej instancji wszystkich modeli, użyłbym
ActiveRecord::Base.connection.tables.map(&:classify) .map{|name| name.constantize if Object.const_defined?(name)} .compact.each(&:delete_all)
źródło
select
gdy potrzebujesz użyć wyrażenia if wewnątrz bloku, w ten sposób unikniesz konieczności łączenia w łańcuch metody kompaktowej w celu usunięcia elementów zerowych.BlogPost.find_each(&:destroy)
źródło
Jeśli Twój model nazywa się BlogPost, wyglądałoby to tak:
BlogPost.all.map(&:destroy)
źródło
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)
Nowsza odpowiedź w przypadku, gdy chcesz usunąć wszystkie wpisy we wszystkich tabelach:
def reset Rails.application.eager_load! ActiveRecord::Base.descendants.each { |c| c.delete_all unless c == ActiveRecord::SchemaMigration } end
Więcej informacji na temat
eager_load
tutaj .Po jej wywołaniu możemy uzyskać dostęp do wszystkich potomków
ActiveRecord::Base
i możemy zastosować adelete_all
na wszystkich modelach.Pamiętaj, że nie usuwamy tabeli SchemaMigration.
źródło