【发布时间】:2016-06-28 15:12:28
【问题描述】:
我是 Rails 新手,正在执行简单的数据库导入,但无法解决错误。
我在 CSV 中有这样的数据:
"Symbol","Name","LastSale","MarketCap","IPOyear","Sector","industry","Summary Quote",
"DDD","3D Systems Corporation","12.95","$1.45B","n/a","Technology","Computer Software: Prepackaged Software","http://www.nasdaq.com/symbol/ddd",
我使用以下命令为条目创建模型:
bin/rails generate model Companies Symbol:string Name:string LastSale:string MarketCap:string IPOyear:string Sector:string Industry:string SummaryQuote:string
...我运行 db:migrate,然后尝试使用此 rake 任务将数据导入模型:
task :populate => :environment do
#http://stackoverflow.com/questions/4410794/ruby-on-rails-import-data-from-a-csv-file
CSV.foreach("companylist.csv", :headers => true) do |row|
Company.create!(row.to_hash)
end
end
这会导致错误:
rake aborted!
ActiveRecord::UnknownAttributeError: unknown attribute 'industry' for Company.
但是,“公司”模型是使用行业属性创建的——我不知道如何继续。
感谢您的帮助!
【问题讨论】:
-
是不是因为你使用了大写字母作为列名,即
Industry,而不是industry? -
Ruby 区分大小写。我不确定 CSV 的
row.to_hash是否对列名进行了小写,但似乎确实如此。当哈希到达您的模型时,它会尝试分配给不存在的industry属性。Industry有一个,但不匹配。 -
更改列名以匹配属性可以完全解决该问题,但会产生一个新错误,
"ActiveRecord::UnknownAttributeError: unknown attribute ' ' for Company." -
从 CSV 文件的每一行中删除结束逗号。
-
您的 CSV 中是否有没有标题的悬空列?在创建模型之前检查
row.to_hash的输出,并确保结构符合您的预期。
标签: ruby-on-rails ruby csv activerecord