377 Stimmen

Wie löscht man ein ActiveRecord-Objekt?

Wie löscht man ein ActiveRecord-Objekt?

Ich habe mir Aktive Datensatzabfrage und dort steht nichts über das Löschen, soweit ich sehen kann.

  1. Löschen durch id ,

  2. Löschen Sie das aktuelle Objekt wie: user.remove ,

  3. Können Sie auf der Grundlage einer where Klausel?

643voto

Marek Sapota Punkte 19500

Es ist destroy et 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 auch delete et delete_all die sich nicht durchsetzen lässt :before_destroy et :after_destroy Rückrufe oder abhängige Zuordnungsoptionen.

User.delete_all(condition: 'value') w ohne Primärschlüssel

Nota : aus @hammadys Kommentar, user.destroy funktioniert nicht, wenn das Benutzermodell keinen Primärschlüssel hat.

Anmerkung 2 : Von @pavel-chuchuva's Kommentar, destroy_all mit Bedingungen und delete_all mit Bedingungen wurde in Rails 5.1 veraltet - siehe guides.rubyonrails.org/5_1_release_notes.html

67voto

nonopolarity Punkte 138211

Es gibt delete , delete_all , destroy y destroy_all .

Die Dokumente sind: ältere Dokumente et Rails 3.0.0-Dokumente

delete instanziert die Objekte nicht, während destroy tut. Ganz allgemein, delete ist schneller als destroy .

52voto

Tadas T Punkte 2293
  1. User.destroy

User.destroy(1) löscht Benutzer mit id == 1 et :before_destroy et :after_destroy Rückrufe auftreten. Wenn Sie zum Beispiel verbundene Datensätze haben

has_many :addresses, :dependent => :destroy

Wenn der Benutzer vernichtet ist, werden auch seine Adressen vernichtet. Wenn Sie stattdessen die Aktion "Löschen" verwenden, werden keine Rückrufe ausgelöst.

  1. User.destroy , User.delete

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

Hinweis : User ist eine Klasse und User ist ein Instanzobjekt

1voto

Dhivya Dandapani Punkte 181

Wenn Sie Rails 5 und höher verwenden, funktioniert die folgende Lösung.

#delete based on id
user_id = 50
User.find(id: user_id).delete_all

#delete based on condition
threshold_age = 20
User.where(age: threshold_age).delete_all

https://www.rubydoc.info/docs/rails/ActiveRecord%2FNullRelation:delete_all

-2voto

Martins Punkte 21

Das Löschen einer Zeile aus einer bestimmten Tabelle oder eines Datensatzes aus einer Tabelle ist ziemlich einfach. Von Ihrer Konsole aus müssen Sie nur den Datensatz anhand seiner Id erfassen und ihn dann löschen oder zerstören.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X