Optimistic locking

Lo que voy a contar aquí­ está mucho mejor explicado en el Railscast #59 Optimistic Locking. Es una forma de evitar que un registro sea editado por dos usuarios al mismo tiempo y se pierdan los cambios de uno de ellos, al ser sobreescritos por el otro. Para ver un ejemplo visual y con más detalle mejor en el video de Railscasts. Aquí­ sólo cuento lo básico y sin profundizar mucho.

Incluir en la tabla un campo integer lock_version

Poner este campo como hidden en el formulario de edición.

Si dos usuarios actualizan el mismo registro a la vez hay una inconsistencia en el valor de lock_version y se genera una excepción StaleObject.

Capturar la excepción y actuar en consecuencia. Una opción sencilla, tal como cuenta Ryan Bates en el Railscast, es decirle al usuario que el registro ha sido editado por otra persona y que vuelva a meter los datos sobre el formulario recargado con los datos actuales de la base de datos. Pero como tenemos también disponibles los datos que ha introducido este usuario en el form antes de dar el error podemos mostrarselos para que tenga las dos verisones y pueda comparar.

En los comentarios del Railscast también se habla de intentar ver si las dos actualizaciones son compatibles y hacer el merge de forma automática, sin molestar al usuario.

Añadir nuevo comentario