Проблема, которую вы наблюдаете, связана с тем, как параметры назначаются блоку.Во втором примере вы заметите, что range
содержит массив, содержащий один range
и соответствующий datas
, переменная datas
содержит индекс, а i
всегда nil
.
Это потому, что ruby "распускает" массивы, если это единственный параметр блока.Если у вас более одного типа (в данном случае это массив и целое число), вы должны указать ruby, что он должен делать.Самый простой способ - использовать круглые скобки.
<% sets.each_with_index do |(range, datas), i| %>
...
<% end %>
Таким образом, ruby поймет, что вы имеете в виду, и разбит массив на range
и datas
.Это на самом деле особенность оператора присваивания ruby в сочетании с оператором запятой.Работает так
my_array = [1, 2]
(x, y) = my_array
p x # prints 1
p y # prints 2