Diferencia entre destruir y eliminar

Resuelto Saggex asked hace 10 años • 7 respuestas

Cuál es la diferencia entre

@model.destroyy@model.delete

Por ejemplo:

Model.find_by(col: "foo").destroy_all
//and
Model.find_by(col: "foo").delete_all

¿Realmente importa si uso uno u otro?

Saggex avatar Mar 31 '14 15:03 Saggex
Aceptado

Básicamente destroyejecuta cualquier devolución de llamada en el modelo mientras deleteno lo hace.

Desde la API de rieles :

  • ActiveRecord::Persistence.delete

    Elimina el registro en la base de datos y congela esta instancia para reflejar que no se deben realizar cambios (ya que no se pueden conservar). Devuelve la instancia congelada.

    La fila simplemente se elimina con una instrucción DELETE de SQL en la clave principal del registro y no se ejecutan devoluciones de llamada.

    Para aplicar las devoluciones de llamada before_destroy y after_destroy del objeto o cualquier opción de asociación dependiente, utilice #destroy.

  • ActiveRecord::Persistence.destroy

    Elimina el registro en la base de datos y congela esta instancia para reflejar que no se deben realizar cambios (ya que no se pueden conservar).

    Hay una serie de devoluciones de llamada asociadas con la destrucción. Si la devolución de llamada before_destroy devuelve falso, la acción se cancela y destruir devuelve falso. Consulte ActiveRecord::Callbacks para obtener más detalles.

 avatar Mar 31 '2014 09:03

deletesolo eliminará el registro del objeto actual de la base de datos, pero no sus registros secundarios asociados de la base de datos.

destroyeliminará el registro del objeto actual de la base de datos y también su registro secundario asociado de la base de datos.

Su uso realmente importa:

Si sus múltiples objetos principales comparten objetos secundarios comunes, al llamar destroya un objeto principal específico se eliminarán los objetos secundarios que se comparten entre otros múltiples padres.

Taimoor Changaiz avatar Mar 31 '2014 09:03 Taimoor Changaiz

Cuando invocas destroyo destroy_allsobre un ActiveRecordobjeto, ActiveRecordse inicia el proceso de 'destrucción', analiza la clase que estás eliminando, determina qué debe hacer para las dependencias, ejecuta validaciones, etc.

Cuando invoca deleteo delete_allen un objeto, ActiveRecordsimplemente intenta ejecutar la DELETE FROM tablename WHERE conditionsconsulta en la base de datos, sin realizar otras ActiveRecordtareas de nivel.

nickcen avatar Mar 31 '2014 09:03 nickcen