Вы можете избежать создания переменной @results, которую вам нужно явно вернуть, используя метод Enumerable # map, что-то вроде этого:
items.map do |attribs|
a = attribs.item_attributes
{:label => "#{a.title.to_s[0,85] unless a.title.nil?}",
:value => "#{a.title.to_s unless a.title.nil?}",
:img => "#{attribs.medium_image.url.to_s unless attribs.medium_image.url.nil?}"
}
end
Enumerable # map возвращает массив возвращаемых значений выполнения поставляемого блока для каждого элемента в принимающем массиве. Так что если в вашем оригинальном методе вы хотите вернуть @results, вам лучше использовать map.
Между прочим, даже если вы поместите return @results в конец метода в том виде, в каком он есть, он даст только атрибуты, вычисленные на последней итерации цикла, поскольку вы сбрасываете @results в [] каждый раз, когда Блок называется. Вы можете избежать этого, инициализируя @results в [] перед циклом или полностью избегая использования map.