Es destroy
y destroy_all
métodos, como
user.destroy
User.find(15).destroy
User.destroy(15)
User.where(age: 20).destroy_all
User.destroy_all(age: 20)
Alternativamente, puede utilizar delete
y delete_all
que no va a cumplir :before_destroy
y :after_destroy
devoluciones de llamada o cualquier opción de asociación dependientes.
User.delete_all(condition: 'value')
le permitirá eliminar registros sin una clave primaria
Nota : según el comentario de @ hammady, user.destroy
no funcionará si el modelo de usuario no tiene clave principal.
Nota 2 : Del comentario de @ pavel-chuchuva, destroy_all
con condiciones y delete_all
con condiciones ha quedado en desuso en Rails 5.1 - ver guías.rubyonrails.org/5_1_release_notes.html
User.find_by(username:"bob")
es bueno para identificar el registro que se va a destruir o eliminar.Hay
delete
,delete_all
,destroy
, ydestroy_all
.Los documentos son: documentos antiguos y documentos de Rails 3.0.0
delete
no instancia los objetos, mientras que lodestroy
hace. En general,delete
es más rápido quedestroy
.fuente
delete
es más rápido pero evita las devoluciones de llamada que podría haber definido en el modeloUser.destroy
User.destroy(1)
eliminará usuario conid == 1
y:before_destroy
y:after_destroy
se producen devoluciones de llamada. Por ejemplo, si tiene registros asociadosDespués de que el usuario sea destruido, sus direcciones también serán destruidas. Si utiliza la acción de eliminación en su lugar, no se realizarán devoluciones de llamada.
User.destroy
,User.delete
User.destroy_all(<conditions>)
oUser.delete_all(<conditions>)
Aviso : el usuario es una clase y el usuario es un objeto de instancia
fuente
User.destroy_all()
ejecuta devoluciones de llamada, por lo que antes de eliminar cualquier cosa, carga registros. Son dos sentencias SQL, no una. Además de las implicaciones de rendimiento, esto también tiene implicaciones de concurrencia. La llamada más segura omite las devoluciones de llamada;User.delete_all()
emitirá un soloDELETE FROM...
comando.