2010-11-14 17 views

Antwort

470

Es ist destroy und destroy_all Methoden, wie

user.destroy 
User.find(15).destroy 
User.destroy(15) 
User.where(age: 20).destroy_all 
User.destroy_all(age: 20) 

Alternativ können Sie verwenden delete und delete_all denen :before_destroy und :after_destroy Rückrufe oder alle abhängigen Verein Optionen nicht erzwingen.

User.delete_all(condition: 'value') können Sie Aufzeichnungen ohne Primärschlüssel

+23

user.destroy funktioniert nicht, wenn das Benutzermodell keinen Primärschlüssel hat – hammady

+0

Es sollte 'User.destroy' sein. – Chinmay235

+0

Es funktioniert für mich!, Danke! –

43
  1. User.destroy

User.destroy(1) löscht Benutzer mit id == 1 und :before_destroy und :after_destroy Rückrufe auftreten löschen. Wenn Sie beispielsweise verknüpfte Datensätze haben

has_many :addresses, :dependent => :destroy 

Nachdem der Benutzer zerstört ist, werden seine Adressen ebenfalls zerstört. Wenn Sie stattdessen Löschaktion verwenden, werden keine Rückrufe ausgeführt.

  1. User.destroy, User.delete

  2. User.destroy_all(<conditions>) oder User.delete_all(<conditions>)

Hinweis: User ist eine Klasse, und Benutzer ist eine Instanz Objekt

+3

Vielen Dank für die Adressierung verknüpfter Datensätze. –

+1

ACHTUNG: 'User.destroy_all()' führt Callbacks aus, also lädt es bevor es etwas löscht Datensätze. Es sind zwei SQL-Anweisungen, nicht eine. Abgesehen von den Auswirkungen auf die Leistung hat dies auch Auswirkungen auf die Nebenläufigkeit. Der sicherere Anruf überspringt Rückrufe; 'User.delete_all()' gibt nur einen einzigen 'DELETE FROM ...' Befehl aus. –

50

Es gibt delete, delete_all, destroy und destroy_all.

Die docs sind: older docs und Rails 3.0.0 docs

delete sich die Objekte nicht instanziiert, während destroy tut. Im Allgemeinen ist delete schneller als destroy.

+2

'delete' ist schneller, umgeht jedoch die Rückrufe, die Sie möglicherweise im Modell definiert haben – Rudi

Verwandte Themen