[英]Error Transaction.new into Rails app trying to import CSV data
我嘗試在Rails應用程序中將CSV文件導入到我的數據庫中。 我遵循這一要旨 。
這是我的代碼:
# db/seeds.rb
require 'csv'
csv_text = File.read(Rails.root.join('lib', 'seeds', 'siren_db.csv'))
csv = CSV.parse(csv_text, :headers => true, :encoding => 'ISO-8859-1')
csv.each do |row|
t = Transaction.new
t.siren = row['siren']
t.nom = row['nom']
t.adresse = row['adresse']
t.complement_adresse = row['complement_adresse']
t.pays = row['pays']
t.region = row['region']
t.departement = row['departement']
t.activite = row['activite']
t.date = row['date']
t.nb_salaries = row['nb_salaries']
t.nom = row['nom']
t.prenom = row['prenom']
t.civilite = row['civilite']
t.adr_mail = row['adr_mail']
t.libele_acti = row['libele_acti']
t.categorie = row['categorie']
t.tel= row['tel']
t.save
puts "#{t.siren}, #{t.nom} saved"
end
puts "There are now #{Transaction.count} rows in the transactions table"
不幸的是,我有一個錯誤,但不知道為什么? (我有與要旨完全相同的代碼):
耙子流產了! NameError:未初始化的常量事務/Users/nicolasleroux/Public/sites/sirenforest/db/seeds.rb:6:在'/Users/nicolasleroux/Public/sites/sirenforest/db/seeds.rb:5:in'中的塊:TOP => db:seed(通過使用--trace運行任務來查看完整跟蹤)
該腳本有效,但是所有內容都充滿了“ nill” ...這是我的代碼:
#db/migrate/create_transaction
class CreateTransactions < ActiveRecord::Migration[5.0]
def change
create_table :transactions do |t|
t.integer :siren
t.string :nom_ent
t.string :adresse
t.string :complement_adresse
t.string :pays
t.string :region
t.integer :departement
t.string :activite
t.integer :date
t.string :nb_salaries
t.string :nom
t.string :prenom
t.string :civilite
t.string :adr_mail
t.string :libele_acti
t.string :categorie
t.integer :tel
t.timestamps
end
end
end
#model transaction
class Transaction < ApplicationRecord
end
csv文件的開頭:
SIREN;NOM;ADRESSE;COMPLEMENT_ADRESSE;CP_VILLE;PAYS;REGION;DEPARTEMENT;ACTIVITE;DATE;NB_SALARIES;NOM;PRENOM;CIVILITE;ADR_MAIL;LIBELE_ACTI;CATEGORIE;TEL
38713707;SYND COPR DU 6 AU 8 RUE DE CHARONNE 75;6 RUE DE CHARONNE;;75011 PARIS;FRANCE;Île-de-France;75;Activités combinées de soutien lié aux bâtiments;2008;1 ou 2 salariés;;;;;Syndicat de copropriété ;PME;
38713707;SYND COPR DU 6 AU 8 RUE DE CHARONNE 75;6 RUE DE CHARONNE;;75011 PARIS;FRANCE;Île-de-France;75;Activités combinées de soutien lié aux bâtiments;2008;1 ou 2 salariés;;;;;Syndicat de copropriété ;PME;
38724340;SYND COPR DU 18 BD ARAGO 75013 PARIS;18 BOULEVARD ARAGO;;75013 PARIS;FRANCE;Île-de-France;75;Activités combinées de soutien lié aux bâtiments;2008;1 ou 2 salariés;;;;;Syndicat de copropriété ;PME;
看一下“設置”部分,內容如下:
確保已創建具有適當列的資源以匹配您的種子數據。 名稱不必匹配。
您必須在rails應用程序中生成事務模型,如下所示:
$ rails generate model Transaction street:text city:string etc...
請參閱要點上的第5節以獲取適當的列。
更新:您應該為CSV文件指定分隔符,如下所示:
csv = CSV.parse(csv_text, :headers => true, :encoding => 'ISO-8859-1', :col_sep => ';' )
哈希鍵也應該像在csv文件中一樣大寫,並且您具有相同的列名,並且應該是唯一的(t.nom)。 完整代碼:
csv = CSV.parse(csv_text, :headers => true, :encoding => 'ISO-8859-1', :col_sep => ';' )
csv.each do |row|
t = Transaction.new
t.siren = row['SIREN']
t.nom = row['NOM'] # => 2 same columns
t.adresse = row['ADRESSE']
t.complement_adresse = row['COMPLEMENT_ADRESSE']
t.pays = row['PAYS']
t.region = row['REGION']
t.departement = row['DEPARTEMENT']
t.activite = row['ACTIVITE']
t.date = row['DATE']
t.nb_salaries = row['NB_SALARIES']
t.nom = row['NOM'] # => 2 same columns
t.prenom = row['PRENOM']
t.civilite = row['CIVILITE']
t.adr_mail = row['ADR_MAIL']
t.libele_acti = row['LIBELE_ACTI']
t.categorie = row['CATEGORIE']
t.tel= row['TEL']
t.save
puts "#{t.siren}, #{t.nom} saved"
end
puts "There are now #{Transaction.count} rows in the transactions table"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.