mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
The optimistic lock column should be increased when calling touch
Signed-off-by: Santiago Pastorino and José Ignacio Costa <santiago+jose@wyeworks.com>
This commit is contained in:
parent
d3b2596884
commit
8bc464c809
3 changed files with 16 additions and 0 deletions
|
@ -224,6 +224,7 @@ module ActiveRecord
|
|||
def touch(name = nil)
|
||||
attributes = timestamp_attributes_for_update_in_model
|
||||
attributes << name if name
|
||||
|
||||
unless attributes.empty?
|
||||
current_time = current_time_from_proper_timezone
|
||||
changes = {}
|
||||
|
@ -232,6 +233,12 @@ module ActiveRecord
|
|||
changes[column.to_s] = write_attribute(column.to_s, current_time)
|
||||
end
|
||||
|
||||
if locking_enabled?
|
||||
lock_col = self.class.locking_column.to_s
|
||||
previous_value = send(lock_col).to_i
|
||||
changes[lock_col] = write_attribute(lock_col, previous_value + 1)
|
||||
end
|
||||
|
||||
@changed_attributes.except!(*changes.keys)
|
||||
primary_key = self.class.primary_key
|
||||
self.class.update_all(changes, { primary_key => self[primary_key] }) == 1
|
||||
|
|
|
@ -99,6 +99,14 @@ class OptimisticLockingTest < ActiveRecord::TestCase
|
|||
assert_equal 1, p1.lock_version
|
||||
end
|
||||
|
||||
def test_touch_existing_lock
|
||||
p1 = Person.find(1)
|
||||
assert_equal 0, p1.lock_version
|
||||
|
||||
p1.touch
|
||||
assert_equal 1, p1.lock_version
|
||||
end
|
||||
|
||||
|
||||
def test_lock_column_name_existing
|
||||
t1 = LegacyThing.find(1)
|
||||
|
|
|
@ -430,6 +430,7 @@ ActiveRecord::Schema.define do
|
|||
t.references :number1_fan
|
||||
t.integer :lock_version, :null => false, :default => 0
|
||||
t.string :comments
|
||||
t.timestamps
|
||||
end
|
||||
|
||||
create_table :pets, :primary_key => :pet_id ,:force => true do |t|
|
||||
|
|
Loading…
Reference in a new issue