2010-11-14 16 views

Respuesta

470

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 hará 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

+23

user.destroy no funcionará si el modelo de usuario no tiene clave principal – hammady

+0

Debería ser 'User.destroy'. – Chinmay235

+0

¡Me funciona! ¡Gracias! –

43
  1. User.destroy

User.destroy(1) borrará usuario con ocurren id == 1 y :before_destroy y :after_destroy devoluciones de llamada. Por ejemplo, si tiene registros asociados

has_many :addresses, :dependent => :destroy 

Una vez destruido el usuario, sus direcciones también se destruirán. Si utiliza una acción de eliminación en su lugar, no se realizarán devoluciones de llamada.

  1. User.destroy, User.delete

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

Aviso: El usuario es una clase y el usuario es un objeto de instancia

+3

Gracias por abordar los registros asociados. –

+1

CUIDADO: 'User.destroy_all()' ejecuta devoluciones de llamada, por lo que antes de eliminar cualquier cosa, carga registros. Son dos declaraciones 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á solo un comando 'DELETE FROM ...'. –

50

Hay delete, delete_all, destroy y destroy_all.

Los documentos son: older docs y Rails 3.0.0 docs

delete no instanciar los objetos, mientras que destroy hace. En general, delete es más rápido que destroy.

+2

'delete' es más rápido, pero omite las devoluciones de llamada que podría haber definido en el modelo – Rudi

Cuestiones relacionadas