Я использую ruby CSV.parse для чтения реальных данных из листа Google для моего проекта Rails. В моем файле seed.rb я читаю данные в формате csv, например:
point_csv_path = "https://docs.google.com/spreadsheets/d/{key}/gviz/tq?tqx=out:csv&sheet=points"
CSV.parse(open(point_csv_path), :headers=>true).each do |row|
Point.create!(
point_id: row["point_id"].to_i,
point_type: row["point_type"],
identifier: row["identifier"].to_i,
longitude: row["longitude"],
latitude: row["latitude"],
location: row["location"],
ordering: row["ordering"].to_i)
end
. Для данных на листе Google я вручную копирую и вставляю данные из онлайн-источника, и данные не содержат кавычек. все. Точные первые 3 строки данных на листе Google следующие:
point_id point_type identifier longitude latitude location ordering
1 sensor 1 -71.050054 42.360152 null 0
2 sensor 2 -71.049428 42.359373 null 0
3 sensor 3 -71.049337 42.358969 null 0
После того, как я запустил $ rails db:seed
, я получаю следующее сообщение об ошибке
rails aborted!
CSV::MalformedCSVError: Illegal quoting in line 3.
/media/anyan/file/rails_project/db/seeds.rb:33:in `<main>'
/media/anyan/file/rails_project/bin/rails:9:in `<top (required)>'
/media/anyan/file/rails_project/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:seed
(See full trace by running task with --trace)
Я знаю, что есть много подобных вопросов по stackoverflow, но ни один из них я не пытался решить мою проблему. Например, добавив :quote_char => "|"
или :encoding => 'bom|utf-8'
в качестве аргумента для CSV.parse (). Я думал, что это связано с чтением потока данных CSV, поэтому я загрузил данные на диск, и у меня та же ошибка. Как я могу решить эту проблему? Спасибо!
ОБНОВЛЕНИЕ: после загрузки CSV-файла на локальный диск и открытия с помощью VSCode первые 3 строки данных:
"point_id","point_type","identifier","longitude","latitude","location","ordering"
"1","sensor","1","-71.050054","42.360152","null","0"
"2","sensor","2","-71.049428","42.359373","null","0"
"3","sensor","3","-71.049337","42.358969","null","0"