module
CQL::ActiveRecord::OptimisticLocking
Overview
Provides optimistic locking functionality for Active Record models. This module allows you to prevent concurrent updates from overwriting each other by using a version column in the database.
Usage
Include this module in your model:
class User < CQL::ActiveRecord::Base
include CQL::ActiveRecord::OptimisticLocking
optimistic_locking column_name: :version_number
end
The table should have a version column:
schema.create_table :users do |t|
t.primary :id, Int64
t.column :name, String
t.column :email, String
t.lock_version :version_number
end
When updating a record, any concurrent updates will be detected:
user = User.find!(1)
# Somebody else updates this record in another process
begin
user.update!(name: "New Name") # This will fail
rescue CQL::OptimisticLockError
# Handle concurrent update
user.reload! # Get the latest version
user.update!(name: "New Name") # Try again
end
Defined in:
active_record/optimistic_locking.crMacro Summary
-
optimistic_locking(version_column = :lock_version)
Define optimistic locking for a model Specifies optimistic locking settings for the model.
Macro Detail
macro optimistic_locking(version_column = :lock_version)
#
Define optimistic locking for a model Specifies optimistic locking settings for the model.
- @param column_name [Symbol] the name of the version column (default: :version)
Example
class User < CQL::ActiveRecord::Base
include CQL::ActiveRecord::OptimisticLocking
optimistic_locking column_name: :version
end