Если вы запустите консоль irb
, вы увидите, что Array.new[10],[2]
не создает требуемый массив, а создает следующий массив:
[nil, [2]]
Если вы хотите создать новый массив с 10 элементами массива, используйте следующий конструктор:
Array.new(10, [])
Обновление 1
Но, читая ваш вопрос далее, я вижу, что вам нужен Hash
вместо Array
, и вы должны помнить, что ruby начинает индексировать с 0
вместо 1
.
Итак:
@my_ids_and_names = Hash.new
@my_ids.each do |cid|
@my_ids_and_names[cid] = Array.new
@my_ids_and_names[cid][0] = my_id
@my_ids_and_names[cid][1] = MyModel.find(my_id).internal_name
end
@my_ids_and_names
Что может быть дополнительно упрощено до:
@my_ids_and_names = {}
@my_ids.each do |cid|
@my_ids_and_names[cid] = [ my_id, MyModel.find(my_id).internal_name ]
end
@my_ids_and_names
Обновление 2
Но это не сработает с вашим each
циклом, который вы предоставили, поэтому я бы использовал следующий код:
@my_ids_and_names = {}
@my_ids.each do |cid|
@my_ids_and_names[cid] = MyModel.find(my_id).internal_name
end
@my_ids_and_names
Это создаст Hash
с cid
клавишами и internal_name
из MyModels
в качестве значений.