0

この配列を分割してデータベースに保存するにはどうすればよいですか?

モデルには、という3つのフィールドがあります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] ... }

配列を分割し、結果を3つのフィールドに順番Questionに、AnswerおよびPhase各セットに格納したいと思います。

私のBatchテーブルには、、、の3つの列がquestion_idありanswer_idますphase_id

の最初の値はarray[5,0,1]、、5question_id、および0になります。2行目で、 to 、to 、to 。answer_id1phase_id25question_id1answer_id3phase_id

4

2 に答える 2

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
于 2013-01-15T17:28:16.840 に答える
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には文字列キーが必要なため、これは必要なものに非常に近いものです。まったく同じにするには、カスタムエミッタを作成する必要があります。

于 2013-01-15T17:11:46.403 に答える