¿Cómo se elimina un objeto ActiveRecord?
Observé la consulta de registros activos y no puedo ver nada sobre la eliminación.
Eliminar por
id,Eliminar el objeto seleccionado como:
user.remove,¿Se puede eliminar en función de una
wherecláusula?
¿Cómo se elimina un objeto ActiveRecord?
Observé la consulta de registros activos y no puedo ver nada sobre la eliminación.
Eliminar por id,
Eliminar el objeto seleccionado como: user.remove,
¿Se puede eliminar en función de una wherecláusula?
Respuestas:
Es destroyy destroy_allmé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 deletey delete_allque no va a cumplir :before_destroyy :after_destroydevoluciones 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.destroyno funcionará si el modelo de usuario no tiene clave principal.
Nota 2 : Del comentario de @ pavel-chuchuva, destroy_allcon condiciones y delete_allcon 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, y destroy_all.
Los documentos son: documentos antiguos y documentos de Rails 3.0.0
deleteno instancia los objetos, mientras que lo destroyhace. En general, deletees más rápido que destroy.
deletees más rápido pero evita las devoluciones de llamada que podría haber definido en el modelo
User.destroyUser.destroy(1)eliminará usuario con id == 1y :before_destroyy :after_destroyse producen devoluciones de llamada. Por ejemplo, si tiene registros asociados
has_many :addresses, :dependent => :destroy
Despué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>) o User.delete_all(<conditions>)
Aviso : el usuario es una clase y el usuario es un objeto de instancia
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 solo DELETE FROM...comando.