2017-03-28 70 views
0

我試圖將一個csv文件導入到rails應用程序數據庫中的ruby。當運行bundle exec rake db:import_csv時,我得到了這個錯誤unknown attribute '2191' for Landslide.。 2191是csv文件第一行的第一項。Ruby on rails當將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 
+0

請問您可以粘貼您的csv文件的標題。 –

+0

如果你執行'puts row.to_hash',會發生什麼? –

+0

CSV標題:總ID \t Year_ID \t日期\t日期\t天數\t五天數\t年\t洲\t國家\t位置\t類型\t admin_level \t newlat \t NEWLONG \t映射\t空間面積(m^2)\t來源\t死亡人數\t損傷\t觸發器\t備註\t備註\t報告1 \t來源1 \t報告2 \t來源2 \t代表ORT 3 \t來源3 \t報告4 \t源4 –

回答

0

按我的知識,如果你正在使用row_to哈希您的CSV頭與模型屬性必須匹配。

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