module ActiveRecord::Locking::Optimistic
def _update_row(attribute_names, attempted_action = "update")
def _update_row(attribute_names, attempted_action = "update") return super unless locking_enabled? begin locking_column = self.class.locking_column lock_attribute_was = @attributes[locking_column] update_constraints = _query_constraints_hash attribute_names = attribute_names.dup if attribute_names.frozen? attribute_names << locking_column self[locking_column] += 1 affected_rows = self.class._update_record( attributes_with_values(attribute_names), update_constraints ) if affected_rows != 1 raise ActiveRecord::StaleObjectError.new(self, attempted_action) end affected_rows # If something went wrong, revert the locking_column value. rescue Exception @attributes[locking_column] = lock_attribute_was raise end end