Несколько вопросов. Как указал Тайлер внутри цикла, вы по-прежнему ссылаетесь на arr, когда смотрите, что нужно использовать только i. Кроме того, проблема с регулярным выражением, на которую указал Макс, также действительна. Функция также будет возвращать arr, а не массив new_array, так как это результат вывода цикла for.
Я сделал несколько модификаций.
def convertToNumbers(string)
numerals = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
arr = string.downcase.split('')
new_array = []
arr.each do |i|
if (i =~ /[a-z]/)
numValue = numerals.index(i).to_s
new_array.push(numValue)
end
end
new_array.join
end
puts convertToNumbers('abcd');
который печатает '0123'