ruby-on-rails - software - porque mi celular se actualiza a cada rato
¿Cómo actualizar todo cuando necesita devoluciones de llamada? (3)
Digamos que tengo 15 user_ids
de usuario en una matriz llamada user_ids
.
Si quiero, digamos, cambiar todos sus nombres a "Bob", podría hacerlo:
users = User.find(user_ids)
users.update_all( :name => ''Bob'' )
Sin embargo, esto no dispara devoluciones de llamada. Si necesito activar las devoluciones de llamada en estos registros guardando, que yo sepa, la única manera es usar:
users = User.find(user_ids)
users.each do |u|
u.name = ''Bob''
u.save
end
Sin embargo, esto significa potencialmente una tarea de ejecución muy larga en una acción de controlador.
Entonces, mi pregunta es, ¿hay alguna otra manera mejor / de mayor rendimiento / más rápida para desencadenar una actualización por lotes a un conjunto de registros que active las devoluciones de llamada en los registros?
Aquí hay otra forma de activar devoluciones de llamadas. En lugar de usar
models.update_all(params)
puedes usar
models.find_each { |m| m.update_attributes(params) }
Sin embargo, no recomendaría este enfoque si se trata de grandes cantidades de datos.
¡Espero eso ayude!
En lugar de usar cada / find_each, prueba
models.update(column:value)
No, para ejecutar devoluciones de llamada debe instanciar un objeto que es una operación costosa. Creo que la única manera de resolver su problema es refactorizar las acciones que está realizando en la devolución de llamadas en un método separado que podría usar datos recuperados mediante el método select_all sin instanciación de objetos.