Вы правы в том, что Ruby Hash не сохраняет порядок. На самом деле это часть дела - вы получаете доступ к нему с помощью ключа.
Я предполагаю, что ваш запрос написан для доставки столбцов в том порядке, в котором вы хотите их вывести, и вы надеялись вывести значения через цикл? Кажется, это достаточно приличная идея, но я не могу придумать, как этого добиться, хотя бы без дополнительной работы.
Что бы я порекомендовал, так это явный доступ к столбцам по ключу в вашем шаблоне, поскольку вы, вероятно, в конечном итоге будете применять стили, форматирование с использованием вспомогательных функций, таких как number_with_delimiter, и тому подобное.
Чтобы получить что-то вроде ярлыка, упомянутого выше, я полагаю, вы могли бы создать массив символов в требуемом порядке и извлечь значения из хеша в цикле. Что-то вроде этого? (прошу прощения за потенциально хитрый эрб: я хамл пользователь!)
<% for row in @report.rows %>
<tr>
<% for col in [:a, :b, :c] %>
<td><%= row[col] %></td>
<% end %>
</tr>
<% end %>