|x|
- это параметр, передаваемый в блок. Это особенность Ruby, не специфичная для Ruby on Rails.
Вот очень надуманный пример того, как вы могли бы реализовать функцию, которая принимает блок:
# invoke proc on each element of the items array
def each(items, &proc)
for i in (0...items.length)
proc.call(items[i])
end
end
my_array = [1,2,3];
# call 'each', passing in items and a block which prints the element
each my_array do |i|
puts i
end
По сути, вы вызываете each
и передаете ему две вещи: массив (my_array
) и блок кода для выполнения. Внутренне each
проходит по каждому элементу в массиве и вызывает блок этого элемента. Блок получает единственный параметр, |i|
, который заполняется each
при вызове proc: proc.call(items[i])
.