Ruby on rails 将CSV文件导入ROR中的SQL数据库

Ruby on rails 将CSV文件导入ROR中的SQL数据库,ruby-on-rails,csv,Ruby On Rails,Csv,我搜索过类似的线程,但到目前为止没有运气,因此我正在构建一个RoR应用程序,并且我已经创建了数据库,我只想将css文件导入到我的数据库中,下面是我得到的错误文件: schema.rb: ActiveRecord::Schema.define(version: 20170913210926) do create_table "items", force: :cascade do |t| t.string "title" t.string "description" t.

我搜索过类似的线程,但到目前为止没有运气,因此我正在构建一个RoR应用程序,并且我已经创建了数据库,我只想将css文件导入到我的数据库中,下面是我得到的错误文件:

schema.rb:

ActiveRecord::Schema.define(version: 20170913210926) do
  create_table "items", force: :cascade do |t|
    t.string "title"
    t.string "description"
    t.string "author"
    t.string "tags"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end
end
我还有一个rake任务fileimport.task:

require 'csv'
csv_text = File.read('/Path/to/csv/Item.csv')
csv = CSV.parse(csv_text, :headers => true)
csv.each do |row|
  item.create!(row.to_hash)
end
因此,当我在终端中运行rake import.task时,我得到了以下错误:

rake aborted!
NameError: undefined local variable or method `item' for main:Object

您的rake任务看起来更像常规ruby脚本,而不是rake任务。如果要使用rake进行此操作,请尝试以下操作:

require 'csv'

namespace :import do
  desc 'Imports csv data into db'
  task from_csv: :environment do
    csv_text = File.read('/Path/to/csv/Item.csv')
    csv = CSV.parse(csv_text, :headers => true)
    csv.each do |row|
      Item.create!(row.to_hash)
    end
  end
end

并使用rake import调用它:from_csv

项是您模型的名称吗?试试Item.create!而不是item.create@AaronBreckenridge我想是的,我的models目录中有item.rb文件。@AaronBreckenridge尝试过的项目仍然不起作用,错误日志如下所示:import.task文件的全部内容是什么?对于正确的rake文件,它的格式不正确,如果没有正确的格式,它将无法加载您的环境。这里有一个例子:谢谢你的答案,但我有另一个问题,我的CSV文件包含一个Id列,所以当我尝试导入它时,我得到了:ActiveModel::UnknownAttributeError:项目的未知属性“Id”,你知道我应该如何处理吗?所有的标题名称到底是什么?我马上看到两件事需要检查:1.方法区分大小写。在将行传递给Item.create之前,请确保标题都是小写的,或者将ruby中的所有键都小写!2 id通常用作数据库中模型的主键。根据您的用例,您可能不希望将该字段插入数据库,或者您可能希望为其使用不同的键。这实际上取决于您的用例,所以我不确定什么适合您;hash.reduce{}{acum,k,v{acum.merge k.to_s.downcase.to_sym=>v};endHi Glyoko,非常感谢您的帮助,在csv文件中,第一列是Id,我将它更改为Id,并且它可以工作,但是我想知道除了手动更改头值之外,还有什么方法可以处理这个问题,例如在导入csv文件行时丢弃Id列。reject{k,|k.to|s==Id}将返回没有Id字段的行。