Ruby on rails 将 csv 文件导入数据库时​​属性未知

Ruby on rails Unknow attribute when importing csv file to database

我正在尝试将 csv 文件导入 rails 应用程序数据库中的 ruby。我在 运行 bundle exec rake db:import_csv 时收到此错误 unknown attribute '2191' for Landslide.。 2191 是 csv 文件第一行的第一项。

import_csv.rake

require 'csv'
namespace :db do
  task :import_csv => :environment do
    CSV.foreach("Sample_landslides.csv", :headers => true) do |row|
      Landslide.create!(row.to_hash)
    end
  end
end

架构

  create_table "landslides", force: :cascade do |t|
    t.integer  "total_id"
    t.integer  "year_id"
    t.date     "start_date"
    t.date     "end_date"
    t.integer  "day_number"
    t.string   "continent"
    t.string   "country"
    t.string   "location"
    t.string   "type"
    t.integer  "admin_level"
    t.float    "lat"
    t.float    "lng"
    t.boolean  "mapped"
    t.float    "spatial_area"
    t.integer  "fatalities"
    t.integer  "injuries"
    t.string   "notes"
    t.datetime "created_at",   null: false
    t.datetime "updated_at",   null: false
    t.string   "trigger"
  end

据我所知,如果您使用 row_to 哈希,您的 csv headers 必须与模型属性匹配。

require "csv"

HEADER_MAP = {
  "Total" => :total_id,
}

HEADER_CONVERTER = ->(header) {
  HEADER_MAP.fetch(header, header).to_sym
}

csv = <<END
 Column1,Column2,EXT:MAT:PIDTC
 100,200,300
 400,500,600
END

CSV.new(csv, headers: true, header_converters: HEADER_CONVERTER).each do   |row|
  p row.to_hash
end