2017-03-28 1 views
0

J'essaie d'importer un fichier csv dans une base de données d'applications ruby ​​on rails. J'ai eu cette erreur unknown attribute '2191' for Landslide. lors de l'exécution bundle exec rake db:import_csv. 2191 est le premier élément de la première ligne du fichier csv.Ruby on rails Attribut inconnu lors de l'importation de fichier csv dans la base de données

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 

schéma

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

pouvez-vous s'il vous plaît coller les en-têtes de votre fichier csv. –

+0

Que se passe-t-il si vous faites 'row.to_hash'? –

+0

tête csv: ID total \t Year_ID \t Date de \t Date de \t Numéro jour \t numéro cinq jours \t années \t Continent \t Pays \t Localisation \t Type de \t admin_level \t newlat \t NEWLONG \t cartographiés zone spatiale \t (m^2) \t Source \t accidents mortels \t blessures \t Trigger \t Remarques \t Remarques Rapport Source 1 \t rapport 2 \t Source 2 \t Rep ort 3 \t Source 3 \t Rapport 4 \t Source 4 –

Répondre

0

Selon ma connaissance si vous utilisez row_to hachage vos en-têtes de csv doit correspondre avec des attributs modèle.

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