TP optimistic lock¶ ↑
This gem extends ActiveRecord to handle ActiveRecord::RecordNotUnique with an optimistic behavior. If a uniqueness violation is triggered by the database, it will be returned through the ‘errors` method.
The purpose is to be more performative and assertive than ‘validates_uniqueness_of`, a Rails pessimistic instruction for handling uniqueness.
‘validates_uniqueness_of` performs a select query for each new insert to check unicity. `validates_uniqueness_of` doesn’t work very well in an environment with high concurrency. The select and insert are atomic operations, so some attempts of insert the same record twice happens witha high frequency.
example: “‘
class Foo < ActiveRecord::Base acts_as_unique # end def sample Bar.create(uuid: '5ea880de-e4ce-4770-8d10-c89bac181e40', other: 'bla bla') bar = Bar.create(uuid: '5ea880de-e4ce-4770-8d10-c89bac181e40', other: 'bla bla') #error returned: UNIQUE constraint failed bar.errors end def other_sample Bar.create!(uuid: '5ea880de-e4ce-4770-8d10-c89bac181e40', other: 'bla bla') #error raised: ActiveRecord::RecordInvalid UNIQUE constraint failed Bar.create!(uuid: '5ea880de-e4ce-4770-8d10-c89bac181e40', other: 'bla bla') end