【问题标题】:Rails: Importing from CSV to ActiveRecord gives "NoMethodError: undefined method" for modelRails:从 CSV 导入 ActiveRecord 为模型提供“NoMethodError:未定义方法”
【发布时间】: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


【解决方案1】:

我认为您需要检查表字段名称,我认为表中的字段名称是“行业”而不是行业。 最好的

【讨论】:

    猜你喜欢
    • 2015-11-22
    • 2021-09-24
    • 2012-08-24
    • 2021-11-02
    • 2015-06-14
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多