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
我正在尝试将 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