在 Rails 上导入 CSV 期间的未知属性“headers ...”
Posted
技术标签:
【中文标题】在 Rails 上导入 CSV 期间的未知属性“headers ...”【英文标题】:Unknow attribute 'headers ...' during CSV import on Rails 【发布时间】: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 可能将您的分隔符从逗号更改为其他内容(可能是分号)。看我的回答,我觉得适用***.com/a/51426119/3477163
@AntoineWako 在 Calc 中提供内容的屏幕截图非常棒。但是您能否也提供生成的 CSV(不是屏幕截图,而是纯文本代码块)?结果可能会因 LibreOffice 中所选的 CSV 设置而异。
【参考方案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 更改了分隔符,现在它的工作谢谢!以上是关于在 Rails 上导入 CSV 期间的未知属性“headers ...”的主要内容,如果未能解决你的问题,请参考以下文章
ActiveModel::UnknownAttributeError: WorkOrder 的未知属性“”