我试图将CSV文件中的行上载到我的数据库中,但标头中的空格不断让我感到困惑。因此,例如,标题将是“Order Item Id”,我希望散列键为“order_item_id”。以下是我的代码现在的样子:将空格转换为Rails中CSV标头的下划线
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 | k =“...”} 但它没有做任何事情。我也尝试创建一个像downcasing那样的标题转换器,但是我也无法做到这一点。对不起,如果这是一个新问题,但我一直在寻找答案,他们都没有为我工作。非常感谢!
你也可以使用一个修改'if'代替如果一个空的标题是''''''''''''''''h.downcase.gsub('','_')如果h'或甚至'h.to_s.downcase.gsub('','_')好的。 – Stefan
所以我用这个,它的工作原理,但现在当我尝试上传文件时,我得到了一个“UTF-8无效的字节序列”错误。结果是只有第一行从文件上传。这有可能是与回车/新行搞乱了吗?我从来没有在 –
之前得到过这些错误,我认为你的问题与新代码没有任何关系,很可能这是该文件的问题,之前你没有看到,因为它没有得到这么远(因为标题有问题)。 – taglia