Причина, по которой ваш код не работает, состоит в том, что ваши переменные определены в блоке, поэтому они считаются локальными переменными блока.После выхода из блока эти переменные помечаются как очищенные;каждая итерация переопределяет эти переменные.Также не помогает, что вы переназначаете их на 0 на каждой итерации, но это даже не вступает в силу здесь, потому что переменные не определяются каждый раз.
Вы можете просто определитьпеременные перед блоком, но это все еще довольно грязно.Поскольку в идиомах и соглашениях Ruby акцент делается на чистый и хорошо организованный код, я бы отошел от этого и вместо этого вычислял эти числа отдельно, возможно, в вашем контроллере.1006 * для сравнения, вы можете просто сделать следующее после вывода таблицы поставок:
<tr>
<td colspan="5"></td>
<th>Totals</th>
<td><%= number_to_currency @totals[:overall] %></td>
<td><%= number_to_currency @totals[:paid] %></td>
<td><%= number_to_currency @totals[:balance] %></td>
</tr>