2013-01-15 27 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]]作为数组 –

相关问题