2013-01-15 26 views
0

如何拆分這個數組並存儲到數據庫中?如何拆分數組並在rails上存儲到數據庫中?

我的模型中有三個字段叫Question_id, Answer_id and Phase_id

我有這樣一個結果:

question_hash_string = "{\"5\":[\"5\",\"0\",\"\"],\"25\":[\"25\",\"1\",\"3\"]}"} 

看起來像{5:[5,0,1], 25:[25,1,3] ... }

我想拆分數組並將結果存儲到每個集合的Question,AnswerPhase的三個字段中。

在我的Batch表中,我有三列:question_id,answer_idphase_id

array[5,0,1]第一個值,5進入question_id0answer_id1phase_id。在第二行25question_id,1answer_id3phase_id

+0

你怎麼想保存我的意思是所有的都在同一個表? – codeit

+0

@checkit是的,如果我有一個名爲批處理表和問題,答案和階段三列。我想在數據庫中逐行存儲第一個值問題,第二個答案和第三個到每個數組列表的相位... – Vinay

+0

是關鍵指示批次ID? – codeit

回答

3

你可以這樣做:

hash_values = JSON.parse(question_hash_string) 
hash_values.each do |k,v| 
    b = Batch.new 
    b.question_id, b.answer_id, b.phase_id = v.collect(&:to_i) 
    b.save! 
end 
+0

有時答案會出現在字符串中?有可能對數組中的字符串做同樣的事情嗎? – Vinay

+0

字符串的意思,你能舉個例子嗎? – codeit

+0

例如,{5:[5,Name,1],25 [25,1,3]等等} – Vinay

2

你應該能夠使用JSON解析此:

json_loaded = JSON.load(question_hash_string) 

從那裏,你可以在你可能需要的任何格式發出,但需要將您的值轉換爲整數:

remapped = Hash[ 
    json_loaded.collect do |k, a| 
    [ k.to_i, a.collect(&:to_i) ] 
    end 
] 
# => {5=>[5, 0, 0], 25=>[25, 1, 3]} 

JSON.dump(remapped) 
# => {"5":[5,0,0],"25":[25,1,3]} 

由於JSON需要字符串鍵,這非常接近你想要的。要得到它完全相同,你必須寫一個自定義發射器。

+0

謝謝......我是一個新手..所以你會告訴我如何選擇第一個數組的第一個值?我沒有自定義發射器的想法... – Vinay

+2

@Vinay:'remapped.first'會返回第一個鍵值對['「5」,[1,2,3]]作爲數組 –

相關問題