Come si elimina un oggetto ActiveRecord?
Ho esaminato Active Record Querying e non ha nulla sull'eliminazione che posso vedere.
Elimina per
id,Eliminare l'oggetto corrente come:
user.remove,Puoi eliminare in base a una
whereclausola?
Come si elimina un oggetto ActiveRecord?
Ho esaminato Active Record Querying e non ha nulla sull'eliminazione che posso vedere.
Elimina per id,
Eliminare l'oggetto corrente come: user.remove,
Puoi eliminare in base a una whereclausola?
Risposte:
È destroye destroy_allmetodi, come
user.destroy
User.find(15).destroy
User.destroy(15)
User.where(age: 20).destroy_all
User.destroy_all(age: 20)
In alternativa è possibile utilizzare deletee delete_allche non imporranno :before_destroye :after_destroyrichiamate o eventuali opzioni di associazione dipendenti.
User.delete_all(condition: 'value')ti consentirà di eliminare i record senza una chiave primaria
Nota : dal commento di @hammady, user.destroynon funzionerà se il modello utente non ha una chiave primaria.
Nota 2 : Dal commento di @ pavel-chuchuva, destroy_allcon le condizioni e delete_allcon le condizioni è stato deprecato in Rails 5.1 - vedi guide.rubyonrails.org/5_1_release_notes.html
User.find_by(username:"bob") è un bene per identificare il record di distruggere o eliminare, troppo.
C'è delete, delete_all, destroy, e destroy_all.
I documenti sono: documenti più vecchi e documenti Rails 3.0.0
deletenon crea un'istanza degli oggetti, mentre lo destroyfa. In generale, deleteè più veloce di destroy.
deleteè più veloce ma ignora i callback che potresti aver definito sul modello
User.destroyUser.destroy(1)eliminerà l'utente con id == 1e :before_destroye si :after_destroyverificano callback. Ad esempio se si hanno record associati
has_many :addresses, :dependent => :destroy
Dopo la distruzione dell'utente verranno distrutti anche i suoi indirizzi. Se si utilizza invece l'azione di eliminazione, i callback non si verificheranno.
User.destroy, User.delete
User.destroy_all(<conditions>) o User.delete_all(<conditions>)
Avviso : l'utente è una classe e l'utente è un oggetto istanza
User.destroy_all()esegue i callback, quindi prima di eliminare qualsiasi cosa, carica i record. Sono due istruzioni SQL, non una. A parte le implicazioni sulle prestazioni, anche questo ha implicazioni sulla concorrenza. La chiamata più sicura salta le richiamate; User.delete_all()emetterà un solo DELETE FROM...comando.