Ruby · Avançado · Inglês · Técnico
optimistic locking
Controle de concorrência do ActiveRecord que usa a coluna lock_version: ao salvar, o Rails confere se a versão mudou e lança StaleObjectError se outro processo alterou o registro antes.
Onde usar
Aparece em edições simultâneas, como duas pessoas alterando o mesmo pedido. Evita perda silenciosa de atualização sem travar linhas no banco.
Em código
# migration: add_column :pedidos,
# :lock_version, :integer, default: 0
a = Pedido.find(1)
b = Pedido.find(1)
a.update!(total: 10)
b.update!(total: 20)
# => ActiveRecord::StaleObjectErrorExemplos
Add lock_version to detect concurrent edits.
Adicione lock_version para detectar edições concorrentes.
The second save raised StaleObjectError.
O segundo save lançou StaleObjectError.
Cuidado
Não o confunda com o lock pessimista (lock! e with_lock), que bloqueia a linha no banco; o otimista só detecta o conflito, e você precisa tratar a exceção.
Sinônimos
lock otimista
Antônimos
lock pessimista