Skip to main content

optimistic_locking_advanced

🔒 Advanced Optimistic Locking Usage​

Use lock_version to detect concurrent updates and implement retry logic. Wrap updates in transactions and handle ActiveRecord::StaleObjectError to ensure data integrity under concurrency.

class Account < ApplicationRecord
# ensure lock_version column exists
end

# Service
def transfer_funds(from_account, to_account, amount)
Account.transaction do
from_account.lock!
to_account.lock!

from_account.balance -= amount
to_account.balance += amount

from_account.save!
to_account.save!
end
rescue ActiveRecord::StaleObjectError
retry
end