¿Cómo se elimina un objeto ActiveRecord?

Resuelto Blankman asked hace 14 años • 5 respuestas

¿Cómo se elimina un objeto ActiveRecord?

Miré Active Record Querying y no hay nada sobre eliminación que pueda ver.

  1. Eliminar por id,

  2. Eliminar el objeto actual como: user.remove,

  3. ¿Se puede eliminar en base a una wherecláusula?

Blankman avatar Nov 14 '10 20:11 Blankman
Aceptado

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 usar deletey delete_allque no aplicará devoluciones :before_destroyde :after_destroyllamada ni ninguna opción de asociación dependiente.

User.delete_all(condition: 'value')le permitirá eliminar registros sin una clave principal

Nota : según el comentario de @hammady, user.destroyno funcionará si el modelo de usuario no tiene una clave principal.

Nota 2 : Del comentario de @ pavel-chuchuva, destroy_allcon condiciones y delete_allcon condiciones ha quedado obsoleto en Rails 5.1; consulte guías.rubyonrails.org/5_1_release_notes.html

Marek Sapota avatar Nov 14 '2010 13:11 Marek Sapota

Hay delete, delete_all, destroyy destroy_all.

Los documentos son: documentos anteriores y documentos Rails 3.0.0

deleteno crea instancias de los objetos, mientras que destroylo hace. En general, deletees más rápido que destroy.

nonopolarity avatar Nov 14 '2010 13:11 nonopolarity
  1. User.destroy

User.destroy(1)eliminará al usuario con id == 1y se producirán devoluciones :before_destroyde :after_destroyllamada. 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 la acción de eliminación en su lugar, no se producirán devoluciones de llamada.

  1. User.destroy,User.delete

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

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

Tadas T avatar Nov 14 '2010 13:11 Tadas T

Si está utilizando Rails 5 y superior, la siguiente solución funcionará.

#delete based on id
user_id = 50
User.find(id: user_id).delete_all

#delete based on condition
threshold_age = 20
User.where(age: threshold_age).delete_all

https://www.rubydoc.info/docs/rails/ActiveRecord%2FNullRelation:delete_all

Dhivya Dandapani avatar Jun 25 '2020 09:06 Dhivya Dandapani