Ruby on rails 尝试导入CSV数据时出错Transaction.new进入Rails应用程序
我尝试将CSV文件导入Rails应用程序中的数据库。我跟着 这是我的密码:Ruby on rails 尝试导入CSV数据时出错Transaction.new进入Rails应用程序,ruby-on-rails,ruby,ruby-on-rails-3,csv,Ruby On Rails,Ruby,Ruby On Rails 3,Csv,我尝试将CSV文件导入Rails应用程序中的数据库。我跟着 这是我的密码: # 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.
# 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'Tasks: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
看这张1。设置部分,它是这样说的:
$ rails generate model Transaction street:text city:string etc...
csv = CSV.parse(csv_text, :headers => true, :encoding => 'ISO-8859-1', :col_sep => ';' )
确保已创建具有适当列的资源,以匹配种子数据。名字不必匹配
您必须在rails应用程序中生成事务模型,如下所示:
$ rails generate model Transaction street:text city:string etc...
csv = CSV.parse(csv_text, :headers => true, :encoding => 'ISO-8859-1', :col_sep => ';' )
有关适当的列,请参见第5节的要点
更新:
您应该为CSV文件指定如下分隔符:
$ rails generate model Transaction street:text city:string etc...
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"
看这张1。设置部分,它是这样说的:
$ rails generate model Transaction street:text city:string etc...
csv = CSV.parse(csv_text, :headers => true, :encoding => 'ISO-8859-1', :col_sep => ';' )
确保已创建具有适当列的资源,以匹配种子数据。名字不必匹配
您必须在rails应用程序中生成事务模型,如下所示:
$ rails generate model Transaction street:text city:string etc...
csv = CSV.parse(csv_text, :headers => true, :encoding => 'ISO-8859-1', :col_sep => ';' )
有关适当的列,请参见第5节的要点
更新:
您应该为CSV文件指定如下分隔符:
$ rails generate model Transaction street:text city:string etc...
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"
你是否有一个名为
Transaction
的模型,或者你只是不假思索地复制/粘贴了要点代码?确实,很抱歉,我只是从Rails开始。。。对于方法t.name,我应该在模型中写入什么?您需要创建一个模型来描述此数据将填充的实体。我的意思是,如果你的简历文件中的每一行都代表一个客户,例如,你需要创建一个客户模型,其中包含你要导入的所有列(siren、nom、adrese…)。在你继续之前阅读以下内容:你是否有一个名为Transaction
的模型,或者你只是不假思索地复制/粘贴了要点代码?确实,抱歉,我只是从Rails开始。。。对于方法t.name,我应该在模型中写入什么?您需要创建一个模型来描述此数据将填充的实体。我的意思是,如果你的简历文件中的每一行都代表一个客户,例如,你需要创建一个客户模型,其中包含你要导入的所有列(siren、nom、adrese…)。继续之前请阅读:所以我在迁移文件中添加了列,它应该可以工作?@AlphaNico是的。它可以工作,但我不知道为什么所有的列都是nill。。。我已在中更新了我的代码question@AlphaNico迁移模型后是否运行了rake db:seed
命令?此命令将运行db/seeds.rb文件,因此它将根据此db/seeds.rb文件填充事务表是的。实际上,我不确定我的csv文件是否具有与要点相同的结构。我有不同类别的列,然后有数千行填充这些列。似乎要点正好相反:行中有类别,然后列填充它们否?所以我在迁移文件中添加列,它应该可以工作?@AlphaNico是的。它可以工作,但我不知道为什么所有内容都填充nill。。。我已在中更新了我的代码question@AlphaNico迁移模型后是否运行了rake db:seed
命令?此命令将运行db/seeds.rb文件,因此它将根据此db/seeds.rb文件填充事务表是的。实际上,我不确定我的csv文件是否具有与要点相同的结构。我有不同类别的列,然后有数千行填充这些列。似乎要点正好相反:行中有类别,然后列中填充类别否?