Я пытаюсь загрузить строки из файла CSV в мою базу данных, но пробелы в заголовках продолжают меня путать. Например, заголовок будет «Идентификатор элемента заказа», и я хочу, чтобы хеш-ключ был «order_item_id». Вот что мой код выглядит сейчас:Перемещение пробелов в символах подчеркивания в заголовках CSV в Rails
CSV.foreach(file.path, headers:true, :header_converters => lambda { |h| h.try(:downcase) }, col_sep: ';') do |row|
product_hash = row.to_hash
product = OrderCsv.where(id: product_hash["id"])
if product.count ==1
product.first.update_attributes(product_hash)
else
user.order_csvs.create!(product_hash)
end
end
Я пытался редактировать product_hash с product_hash.keys.each {| к | k = "..."} , но он ничего не делает. Я также попытался создать конвертер заголовков, как тот, который делает downcasing, но я тоже не смог выполнить эту работу. Извините, если это новый вопрос, но я везде искал ответ, и никто из них не работал на меня. Большое спасибо!
Вы также можете использовать модификатор 'if' вместо из цепочки 'try', то есть' h.downcase.gsub ('', '_'), если h' или, может быть, даже 'h.to_s.downcase.gsub ('', '_')', если пустой заголовок Хорошо. – Stefan
Так что я использовал это, и он работает, но теперь я получаю ошибку «неправильная байтовая последовательность в UTF-8» при попытке загрузить файл. В результате только первая строка загружается из файла. Возможно ли, что это возится с возвратом каретки/новой строкой? Я никогда не получал эти ошибки до –
. Я не думаю, что ваша проблема имеет какое-либо отношение к новому коду, скорее всего, это проблема с файлом, и вы не видели этого раньше, потому что это не получилось (из-за проблемы с заголовками). – taglia