1
0
Fork 0
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:
Franck Verrot 2010-11-27 11:14:26 +01:00 committed by Santiago Pastorino and José Ignacio Costa
parent d3b2596884
commit 8bc464c809
3 changed files with 16 additions and 0 deletions

View file

@ -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

View file

@ -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)

View file

@ -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|