What is optimistic vs pessimistic locking in Rails?

Answer

Optimistic locking assumes conflicts are rare — multiple users can read the same record simultaneously. When saving, Rails checks a lock_version integer column; if another user already updated the record, it raises ActiveRecord::StaleObjectError, which you rescue and retry. Enable by adding a lock_version column. Pessimistic locking acquires a database-level lock preventing other transactions from reading or writing: User.lock.find(id) issues SELECT ... FOR UPDATE. Use pessimistic locking for financial transactions where stale reads are unacceptable. Use optimistic locking for high-read, low-conflict scenarios like CMS editing.