0

次のようなデータをインポートするタスクを作成しました。

CSV.foreach(file, :headers => true) do |row|  
  question = Question.new ({  
  content:   row[0],
  mark:      row[1],
  topic_id:  row[2],
  question_type_id: row[3],
  answers_attributes: [
    { content: row[5], correct: row[6] },
    { content: row[7], correct: row[8] }
  ]
})
question.user_id = row[4]
question.save!

これは私のCSVファイルです:

content, mark, topic_id, question_type_id, user_id, content, correct, content, correct
_____ are people involved in or affected by project activities, 5, 16, 1, 3, True, 't', False, 'f'

しかし、インポートタスクを実行するとcorrect attribute、データベースでは常に FALSE になります。PostgreSQL のさまざまなブールデータ型を試してみましたが、機能しませんでした。私は何を間違っていますか?

4

3 に答える 3

1

問題が見つかりました。それはcsvファイルにあります:

content, mark, topic_id, question_type_id, user_id, content, correct, content, correct
_____ are people involved in or affected by project activities, 5, 16, 1, 3, True, 1, False, 0

ここでの問題は、ブール列の値の前のスペースです。上記のcsvファイルでTrue, 1は、間のスペースが問題です。csv ファイルをデータベースにインポートすると、 の前にスペースが含まれる1ため、インポートされた値は" 1"ではなく"1"であり、postgresql はスペースのある値を認識できません。その前にスペースを削除しましたが、現在は機能しています。これは私の正しい csv ファイルです (すべてのスペースを削除しました)。

content,mark,topic_id,question_type_id,user_id,content,correct,content,correct
_____ are people involved in or affected by project activities,5,16,1,3,True,1,False,0

私のようにCSVファイルのスペースで誰かが問題を抱えている場合、これはSOに役立つかもしれません。

于 2012-11-07T11:23:02.207 に答える
0

True/Falseをtrue/falseに置き換えてみてください

1.9.3-p194 :006 > True
NameError: uninitialized constant True
from (irb):6
from /Users/SAdvincula/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'
1.9.3-p194 :007 > true
=> true 
于 2012-11-07T09:53:24.727 に答える
0

csv ファイルを変更する

content, mark, topic_id, question_type_id, user_id, content, correct, content, correct
_____ are people involved in or affected by project activities, 5, 16, 1, 3, True, '1', False, '0'
于 2012-11-07T10:00:45.140 に答える