Во-первых, используйте Enumerable # map (что-то вроде @o.map { |e| [e.id, e.title] }
), чтобы получить массив ActiveRecord в упрощенный чистый объект Ruby, который выглядит следующим образом:
a = [[1, "Blah1"], [2, "Blah2"], [3, "Blah3"], [4, "Blah4"]]
Тогда:
a.transpose.zip([:id, :title]).inject({}) { |m, (v,k)| m[k] = v; m }
Альтернативное решение: Это может быть менее сложно и проще для чтения, если вместо вместо вы только что сделали что-то прозаическое:
i, t = a.transpose
{ :id => i, :title => t }
В любом случае вы получите:
=> {:title=>["Blah1", "Blah2", "Blah3", "Blah4"], :id=>[1, 2, 3, 4]}
Обновление: Tokland имеет уточнение, на которое стоит ссылаться:
Hash[[:id, :title].zip(a.transpose)]