Mi pregunta es similar a esta How to skip ActiveRecord callbacks? pero en lugar de AR estoy usando Mongoid, parece que todavía no está implementado en la versión actual de Mongoid, así que me gustaría saber cuál debería ser una solución elegante para Impleméntalo. (si necesario).Cómo omitir devoluciones de llamada en Mongoid Documents?
Respuesta
¡Sí, puedes!
Mongoid está basado en ActiveModel y ActiveModel tiene un skip_callback function. Puede utilizar skip_callback
así:
# skip the callback
MyModelClass.skip_callback(:save, :before, :ensure_foo_is_not_bar)
my_model_instance.update_attributes :foo => 'bar'
# restore the callback for future calls
MyModelClass.set_callback(:save, :before, :ensure_foo_is_not_bar)
estoy usando este sin problemas en una gran aplicación. Para obtener más información, consulte esta entrada del blog de Jeff Kreeftmeijer:
http://jeffkreeftmeijer.com/2010/disabling-activemodel-callbacks/
Ah Cool, gracias! – jpemberthy
Sería fantástico si hubiera una forma de desactivar todas las devoluciones de llamada, como por ejemplo, desactivar las validaciones: 'u.save! (Validate: false)' sería 'u.save! (Callbacks: false)' –
Muchas gracias , este trabajo para saltar devoluciones de llamada en mi suite de pruebas. –
Busco el código. Y no hay forma de evitar la devolución de llamada en Mongoid. En ambas versiones 1.9 y 2.0.
Necesita hacer un parche o una solicitud de función al respecto.
Gracias, sí. También estaba revisando la versión 2.0.0.beta y no hay soporte de omisión de devoluciones de llamada ... veamos cómo lo hace AR y luego impleméntelo en mi versión de mongoid. – jpemberthy
Podría ser más fácil de utilizar las operaciones MongoId atómicos (conectado, desconectado, etc.):
http://mongoid.org/en/mongoid/docs/persistence.html#atomic
Estos hacen no llamadas de devolución de incendios.
Editar: Mongoid 3 dice que no lanzan devoluciones de llamada. Sin embargo, estoy viendo devoluciones de fuego en Mongoid 2. Así que YMMV
Esto también funciona en Mongoid 4. Me estaba costando muchísimo tratar de descubrir cómo incluir un contador en el documento principal con devoluciones de llamada en cascada establecidas en verdadero. – Dex
A menudo esto aparece cuando desea hacer una actualización sin activar todas las devoluciones de llamada en un gran volumen de elementos. Esto se puede hacer descendiendo al controlador:
Reemplazando 'foo' por 'bar' en el campo 'x'.
User.all.each do |u|
User.collection.where({ _id: u.id }).update({
"$set" => { :x => u.x.gsub('foo', 'bar')
})
end
Terminé usando la sugerencia de Brian Armstrong y simplemente llamando
person.set(name:"Robert Pulson")
en mi devolución de llamada después de guardar.
gracias hombre, funciona perfecto +1 – rusllonrails
- 1. mongid incrustados devoluciones de llamada de documentos
- 2. devoluciones de llamada genérica
- 3. Diseñar devoluciones de llamada
- 4. Manejo de devoluciones de llamada
- 5. Cython: implementar devoluciones de llamada
- 6. Esperar múltiples devoluciones de llamada
- 7. Rails: around_ * devoluciones de llamada
- 8. Delegados y devoluciones de llamada
- 9. Cierre y devoluciones de llamada
- 10. devoluciones de llamada de Ajax en rails3
- 11. Creación de devoluciones de llamada en XS
- 12. Rieles: devoluciones de llamada de módulo
- 13. ¿Se producen devoluciones de llamada en el hilo principal (UI)?
- 14. ¿Las devoluciones de llamada son siempre asincrónicas?
- 15. ¿Cómo crear devoluciones de llamada dinámicas en MATLAB?
- 16. ¿Cómo organizar complejas devoluciones de llamada en Rails?
- 17. ¿Cómo puedo animar en jQuery sin apilar devoluciones de llamada?
- 18. HTML5 <video> devoluciones de llamada?
- 19. ¿Qué son cierres y devoluciones de llamada?
- 20. C++ 11 devoluciones de llamada con estilo?
- 21. Saltarse las devoluciones de llamada y validación
- 22. Android: devoluciones de llamada con componente WebView?
- 23. WSDualHttpBinding para devoluciones de llamada dúplex
- 24. ¿GWT JSNI admite devoluciones de llamada?
- 25. ObjC blocks & openssl C devoluciones de llamada
- 26. Cómo vincular "esto" para devoluciones de llamada jQuery?
- 27. Libev, Cómo pasar argumentos a las devoluciones de llamada relevantes
- 28. Forma idiomática de esperar varias devoluciones de llamada en Node.js
- 29. Programación asincrónica en JavaScript sin devoluciones de llamada desordenadas
- 30. ¿Evita las pérdidas de memoria en las devoluciones de llamada?
¿qué versión de Mongoid? Mongoid 1.9.0 o Mongoid 2.0.0.beta? – shingara