0

私のシードファイルは次のようになります...

csv_file_path = 'db/coned.csv'
count = 0
CSV.foreach(csv_file_path) do |row|
  row = Section.new({
    :supervisor => row[0],
    :catagory => row[1],
    :title => row[2],
    :description=> row[3],
    :days => row[4],
    :start_date => row[5],
    :end_date => row[6],
    :start_time => row[7],
    :end_time => row[8],
    :course_id => row[9],
    :room => row[10],
    :building => row[11],
    :location => row[12],
    :tuition => row[13],
    :lab_fee => row[14],
    :insurance_fee => row[15],
    :technology_fee => row[16]
  })
  row.save!
  puts "Added row #{count}"
  count+=1
end

...そして、 rake db:seed を実行するとこのエラーが発生します

レーキが中止されました! Encoding::UndefinedConversionError: "\xC2" from ASCII-8BIT to UTF-8: INSERT INTO "sections" ("building", "catagory", "course_id", "created_at", "days", "description", "end_date" "、"end_time"、"insurance_fee"、"lab_fee"、"location"、"room"、"start_date"、"start_time"、"supervisor"、"technology_fee"、"title"、"tuition"、"updated_at")値 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) /home/johnmlocklear/.rvm/gems/ ruby-1.9.2-p320/gems/activerecord-3.2.11/lib/active_record/connection_adapters/sqlite_adapter.rb:208:in encode' /home/johnmlocklear/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.11/lib/active_record/connection_adapters/sqlite_adapter.rb:208:intype_cast'

このエラーをキャッチしてその行を破棄し、行のインポートを続行する方法についてのアイデア。または、何らかの強制エンコーディングの可能性がありますか?

4

1 に答える 1

1

このデフォルトで行を表示していただければ幸いです。

エラーをキャッチしたい場合は、いくつかの Exception を使用してください。

CSV.foreach(csv_file_path) do |row|
  begin
    row = Section.new({
      :supervisor => row[0],
      ....
      :technology_fee => row[16]
    })
    row.save!
    puts "Added row #{count}"
    count+=1
  rescue Exception
    Rails.logger.error "Encountred error at line #{row.inspect}"
  end
end
于 2013-03-28T13:47:56.933 に答える