2015-05-20 35 views
-2

我有一個數組:循環通過數組,並添加到模型

array = [ [1,2], [2,3], [33,33], [2l,2] ] 

和模型被叫號碼與列numberanumberb。我想,以填補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=0i=i+1陳述。

-1

玩弄多一點後,這裏是什麼工作:(我只是用實例變量)

@i=0 

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

這工作,但幾個百分點。在這裏你不需要一個實例變量,你只需要一個在循環之外初始化的變量,例如'我= 0'會正常工作。當你在'each'循環中初始化'i'時,變量對於塊是局部的,因此每次調用該塊時都會被重置(每次導致它爲0)。所有這些都說明了使用'建議的each_with_index'更具慣用性的Ruby。 – mikej

+0

我會使用數組或模型上的each_with_index嗎? ,因爲我有兩個集合,我需要循環 - 或者我需要兩個each_with_index調用? –

+0

也試圖initiallized i = 0以外的dosn't工作...它給了我:NoMethodError:未定義的方法'[]'爲零:NilClass –