tengo una asociación para un usuario como user has_many agents y agent belongs_to user.
en la consola de rails,estoy tratando de utilizar diferentes usuarios para probar un escenario en particular y quiero que un usuario sin agentes,por lo tanto quiero eliminar el user.agents.
traté de user.agents.map(&:destroy),pero da error como ActiveRecord::StaleObjectError: Attempted to delete a stale object.incluso traté de user.agents.delete_all pero también no funciona.puedo eliminar los usuarios a los agentes con un solo comando en consola de rails.

OriginalEl autor | 2013-07-19

4 Comentarios

  1. 19

    Es mejor usar el destroy porque va a través de todos los Rieles de la magia (callbacks)

    user.destroy #For a single record
    user.agents.destroy_all #For a collection
    quiero destruir user.agents y traté de usuario.de los agentes.destruir,pero me da un error.
    es user.destroy ya sea user.agents.destroy_all. Primera ley en un solo registro, el segundo acto en una colección

    OriginalEl autor Benj

  2. 5

    Usted está buscando un .destroy_all método. Destruye todos los registros de una colección dada.
    Así user.agents.destroy_all, le devuelva una matriz vacía para user.agents.

    Usted no podría haber utilizado .delete_all porque es un método de la clase y elimina los registros que cumplan una determinada condición. Como este, Agent.delete_all(condition). Si se usa sin la condición de que elimina todos los registros de una coincidentes de la tabla.

    Tenga en cuenta que .destroy métodos son métodos de instancia. Se crea un objeto y realizar las devoluciones de llamada antes de borrar. .delete métodos son métodos de clase y que directamente borrar un objeto.

    OriginalEl autor dariodaic

  3. 1

    Esto funciona para mí

    user.agents.find_each(&:destroy)
    Me gusta el sonido de «encontrar a todos y destruir». XD

    OriginalEl autor Geebrok

  4. 0
    ActiveRecord::StaleObjectError 

    Es para El bloqueo optimista, eliminar los bloqueos que usted tenga sobre él antes de intentar eliminar de nuevo. Comprobar si alguien más está usando el sistema o presentar todos los formularios que usted ha abierto.

    OriginalEl autor DickieBoy

Dejar respuesta

Please enter your comment!
Please enter your name here