2015-05-20 2 views
-2

У меня есть массив:Перебор массива и добавить к модели

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 не увеличивается в моем решении. Помоги пожалуйста.

ответ

1

Ваш i находится внутри области действия цикла. Используйте each_with_index { |x,i| и оставьте свои i=0 и i=i+1 заявлениями.

-1

после игры с ним вокруг немного больше, вот что работает: (я просто использовал переменный экземпляр)

@i=0 

n.each {|x| x.update_attributes(numbera:array[@i][0], numberb:array[@i][1]);@[email protected]+1;} 
+0

Это работает, но пара моментов. Здесь вам не нужна переменная экземпляра, вам просто нужна переменная, которая инициализируется вне цикла, например. 'i = 0' будет работать нормально. Когда вы инициализировали 'i' внутри вашего цикла' each', тогда переменная была локальной в блоке и поэтому была сброшена каждый раз, когда был вызван блок (что приводит к тому, что каждый раз он равен 0). Все, что сказано, each_with_index', как было предложено, является гораздо более идиоматичным Ruby. – mikej

+0

Я бы использовал each_with_index в массиве или модели? , так как у меня есть две коллекции, которые мне нужно прокрутить - или мне нужны два вызова each_with_index? –

+0

также ive попробовал инициализированный i = 0 снаружи, что dosn't работает ... это дает мне: NoMethodError: неопределенный метод '[] 'для nil: NilClass –

Смежные вопросы