2012-11-09 50 views
1

以分貝我有一點多維數組像這樣的:如何保存多維數組的值在Rails的

[[2, 1], [751, 159], [793, 195], [978, 527], [938, 783], [977, 881], [713, 592, 101], [337, 248, 143], [444, 647, 196], [913, 763, 211], [752, 746, 225], [862, 878, 373], [876, 900, 597], [719, 904, 236, 11], [448, 836, 883, 59], [486, 723, 241, 150], [864, 611, 619, 167], [558, 796, 707, 353], [915, 683, 738, 534], [641, 777, 892, 107, 78], [264, 310, 161, 574, 114], [549, 849, 596, 181, 160], [633, 471, 497, 438, 262], [351, 485, 544, 772, 348], [890, 941, 572, 418, 374], [776, 972, 1001, 729, 379], [595, 898, 989, 771, 454], [84, 514, 914, 571, 442, 19], [335, 97, 689, 314, 879, 20], [869, 828, 802, 859, 553, 34], [298, 134, 564, 614, 411, 62], [175, 579, 490, 399, 479, 72], [382, 830, 215, 691, 624, 85], [922, 840, 657, 917, 436, 95]] 

正如你可以看到,每個子陣列具有值2和6之間。我有一個叫做「Sub」的模型,其中有db列「sub1」,「sub2」,「sub3」,「sub4」,「sub5」,「sub6」。 (如果子陣列只有2個值,sub3-6的值將爲空)

將每個子陣列保存到db行的正確方法是什麼?

我曾嘗試這樣的: @m = [大陣列I如上所述]

 @m.each do |t| 
     Pair.create(:sub1 => t[0], :sub2 => t[1], :sub3 => t[2], :sub4 => t[3], :sub5 => t[4], :sub6 => t[5]) 
     end 

但由於某些原因,創建,這是否一個表:(樣品 「SUB1」 列的)

看看那裏發生了什麼?它重複每一行,但每次增加一行。

這裏是我的模型:

class Pair < ActiveRecord::Base 
    attr_accessible :id, :sub1, :sub2, :sub3, :sub4, :sub5, :sub6 
end 

更新:我想通了這個問題...我有一個腳本的錯誤部分的創建方法,那就是使其在連續多次運行一個奇怪的方式。感謝大家!

+0

你使用了哪個數據庫? Postgres至少實際上支持數組類型(http://www.postgresql.org/docs/8.0/static/arrays.html)。創建一個存儲其中之一的列應該相當簡單。這也可以讓你訪問數據庫中的數組值,這在某些時候可能很方便。 – MrTheWalrus

+0

我正在使用Postgres,所以這絕對是很好的知道。爲了澄清,雖然,我只看到每個子數組中的一個值保存到它自己的行中。例如:如果一個子數組是[1,2],我會查找我的行有這些值::sub1 => 1,:sub2 => 2,:sub3 => null,:sub4 => null, :sub5 => null,:sum6 => nul – SethS

+0

呵呵。我實際上沒有看到你提供的代碼有什麼問題 - 這就是我如何做你所描述的,當然。也許你可以通過在運行時觀察服務器日誌來獲得一些見解,也許在循環迭代期間添加一些日誌代碼? – MrTheWalrus

回答

4

一種方法是序列化列。看到這裏:http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-serialize在文本列節中保存數組,哈希和其他不可映射的對象。

+0

我只需要每列保存一個值。序列化仍然有助於這種情況?例如,如果一個子數組[1,2],我會尋找我的行有這些值::sub1 => 1,:sub2 => 2,:sub3 => null,:sub4 => null ,:sub5 => null,:sum6 => null – SethS