【问题标题】:Unknow attribute 'headers ...' during CSV import on Rails在 Rails 上导入 CSV 期间的未知属性“headers ...”
【发布时间】:2018-07-19 14:39:25
【问题描述】:

我尝试在 Mac 上导入使用 Numbers 创建的 CSV 时遇到问题,

以前在 Ubuntu 上使用 LibreOffice 一切正常,

当我尝试导入 CSV 文件时出现错误

unknown attribute 'adress   user_id room_type etc...' for Bien.

我认为它不会检测分隔符并将第一个听者行作为一个字符串。

我的导入函数:

def self.import(file)
  CSV.foreach(file.path, headers: true) do |row|
    @bien = Bien.create! row.to_hash
    @bien.save
  end 
end

当我在 Numbers 上创建 CSV 时,我会知道如何导入文件以及是否需要更改。

更新

【问题讨论】:

  • 您能提供Bien 属性和CSV 文件的前几行吗?
  • @Leo 我更新了 CSV 的截图
  • 我怀疑由于您的 adress 列中的值带有逗号,Numbers 可能将您的分隔符从逗号更改为其他内容(可能是分号)。看我的回答,我觉得适用stackoverflow.com/a/51426119/3477163
  • @AntoineWako 在 Calc 中提供内容的屏幕截图非常棒。但是您能否也提供生成的 CSV(不是屏幕截图,而是纯文本代码块)?结果可能会因 LibreOffice 中所选的 CSV 设置而异。

标签: ruby-on-rails ruby csv libreoffice


【解决方案1】:

我认为您是完全正确的,看起来分隔符没有得到尊重,因此标题行显示为一个长字符串。要进行调试,您可以尝试将 pry 放入并运行 CSV.read(file.path) 以查看转换为 CSV 的整个输出。完成此操作后,您应该能够看到 Numbers 用于分隔符的内容。

This post 建议 Numbers 使用分号作为默认分隔符,因此如果您将 col_sep: ';' 定义为选项,则可能会成功。 (参考:CSV docs)。

所以,代码是

def self.import(file)
  CSV.foreach(file.path, col_sep: ';', headers: true) do |row|
    @bien = Bien.create! row.to_hash
    @bien.save
  end 
end

【讨论】:

  • 我看到分隔符是空格,所以我用 LibreOffice 更改了分隔符,现在它的工作谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多