ExpertiDict

Ruby · Avançado · Inglês · Técnico

optimistic locking

/ˌɑptɪˈmɪstɪk ˈlɑkɪŋ/substantivo

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::StaleObjectError

Exemplos

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

Veja também

Todos os termos de Ruby