solas software samsung rato que porque pasa para mis las hacer evitar desactivar cómo como celular cada automáticamente automaticas aplicaciones actualizo actualizar actualizaciones actualiza actualicen ruby-on-rails ruby-on-rails-3 activerecord callback update-all

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.