¿Cómo se elimina un objeto ActiveRecord?
¿Cómo se elimina un objeto ActiveRecord?
Miré Active Record Querying y no hay nada sobre eliminación que pueda ver.
Eliminar por
id
,Eliminar el objeto actual como:
user.remove
,¿Se puede eliminar en base a una
where
cláusula?
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 usar delete
y delete_all
que no aplicará devoluciones :before_destroy
de :after_destroy
llamada 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.destroy
no funcionará si el modelo de usuario no tiene una clave principal.
Nota 2 : Del comentario de @ pavel-chuchuva, destroy_all
con condiciones y delete_all
con condiciones ha quedado obsoleto en Rails 5.1; consulte guías.rubyonrails.org/5_1_release_notes.html
Hay delete
, delete_all
, destroy
y destroy_all
.
Los documentos son: documentos anteriores y documentos Rails 3.0.0
delete
no crea instancias de los objetos, mientras que destroy
lo hace. En general, delete
es más rápido que destroy
.
User.destroy
User.destroy(1)
eliminará al usuario con id == 1
y se producirán devoluciones :before_destroy
de :after_destroy
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 la acción de eliminación en su lugar, no se producirá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
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