У меня есть массив:Перебор массива и добавить к модели
array = [ [1,2], [2,3], [33,33], [2l,2] ]
и модель под названием номера с колоннами numbera
и numberb
. Я хочу, чтобы заполнить numbera
с первым значением в массиве и number b
[так] со вторым значением в массиве, как это:
Numbers Table
numbera numberb
1 2
2 3
33 33
21 2
Как мне это сделать? Это то, что я пытаюсь сделать:
n = Number.all
n.each do { |x| i=0; x.update_attributes(numbera:array[i][0], numberb:array[i][1]);i=i+1}
но он не работает. Значение i
не увеличивается в моем решении. Помоги пожалуйста.
Это работает, но пара моментов. Здесь вам не нужна переменная экземпляра, вам просто нужна переменная, которая инициализируется вне цикла, например. 'i = 0' будет работать нормально. Когда вы инициализировали 'i' внутри вашего цикла' each', тогда переменная была локальной в блоке и поэтому была сброшена каждый раз, когда был вызван блок (что приводит к тому, что каждый раз он равен 0). Все, что сказано, each_with_index', как было предложено, является гораздо более идиоматичным Ruby. – mikej
Я бы использовал each_with_index в массиве или модели? , так как у меня есть две коллекции, которые мне нужно прокрутить - или мне нужны два вызова each_with_index? –
также ive попробовал инициализированный i = 0 снаружи, что dosn't работает ... это дает мне: NoMethodError: неопределенный метод '[] 'для nil: NilClass –