it-swarm.com.de

Löschen aller Datensätze in einer Datenbanktabelle

Wie lösche ich alle Datensätze in einer meiner Datenbanktabellen in einer Ruby on Rails App?

121
Justin Meltzer

Wenn Sie einen Weg ohne SQL suchen, sollten Sie in der Lage sein, delete_all zu verwenden.

Post.delete_all

oder mit einem Kriterium

Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"

Siehe hier für weitere Informationen.

Die Datensätze werden gelöscht, ohne sie vorher zu laden, was sie sehr schnell macht, aber die Funktionalität wie den Zähler-Cache unterbricht, der von Rails Code abhängt, der beim Löschen ausgeführt werden soll.

232
HakonB

Über SQL löschen

Item.delete_all # accepts optional conditions

Löschen durch Aufrufen der Destroy-Methode jedes Modells (teuer, aber es wird sichergestellt, dass Rückrufe aufgerufen werden)

Item.destroy_all # accepts optional conditions

Alle hier

28
lebreeze

wenn Sie die Datenbank vollständig leeren und nicht nur ein Modell oder daran angehängte Modelle löschen möchten, können Sie Folgendes tun:

rake db:purge

sie können dies auch in der Testdatenbank tun

rake db:test:purge
21
KensoDev

Wenn Sie meinen, löschen Sie jede Instanz aller Modelle, würde ich verwenden

ActiveRecord::Base.connection.tables.map(&:classify)
  .map{|name| name.constantize if Object.const_defined?(name)}
  .compact.each(&:delete_all)
5
dfaulken
BlogPost.find_each(&:destroy)
4
Philip

Neuere Antwort für den Fall, dass Sie alle Einträge in allen Tabellen löschen möchten:

def reset
    Rails.application.eager_load!
    ActiveRecord::Base.descendants.each { |c| c.delete_all unless c == ActiveRecord::SchemaMigration  }
end

Weitere Informationen zum eager_loadhier .

Nach dem Aufruf können wir auf alle Nachkommen von ActiveRecord::Base Zugreifen und auf alle Modelle einen delete_all Anwenden.

Beachten Sie, dass die SchemaMigration-Tabelle nicht gelöscht werden darf.

2
Simon Ninon

Wenn Ihr Modell BlogPost heißt, ist es:

BlogPost.all.map(&:destroy)
1
stef