ActiveRecordのwith_lockは自動でreloadされる


表題の通り

u = User.last
u.updated_at = nil #=> (1)
u.with_lock do
  u.updated_at #=> (1) では無くDBの値になる
end

該当するRailsのソースはここ

pessimistic.rb
module ActiveRecord
  module Locking
    module Pessimistic
      def lock!(lock = true)
        reload(:lock => lock) if persisted?
        self
      end

      def with_lock(lock = true)
        transaction do
          lock!(lock)
          yield
        end
      end
    end
  end
end