错误:导入数据CSV导轨4
问题描述:
我对使用CSV将数据导入到SQL数据库的概念很陌生。我跟着一些*帖子,但我得到一个错误。错误状态,Errno::ENOENT: No such file or directory @ rb_sysopen - products.csv
运行后rake import:data
。我在我的application.rb中需要csv,并且我创建了一个csv文件并将其放在TMP中。这是我的代码到目前为止。
我知道我可能会向社区要求很多,但如果有人回答这个问题,您是否可以提供一些关于CSV和Rake功能的更多信息。非常感谢!!!错误:导入数据CSV导轨4
<b>import.rake</b>
namespace :import do
desc "imports data from a csv file"
task :data => :environment do
require 'csv'
CSV.foreach('tmp/products.csv') do |row|
name = row[0]
price = row[1].to_i
Product.create(name: name, price: price)
end
end
end
答
指定CSV文件的完整路径。
例如,如果该文件是在/tmp/
使用:
CSV.foreach('/tmp/products.csv') do |row|
如果products.csv
文件是在应用程序的tmp
目录,使用:
CSV.foreach(Rails.root.join('tmp', 'products.csv')) do |row|
答
我碰到了类似的东西,它被遗忘把两个括号括在括号中,所以你可能想尝试从:
Product.create(name: name, price: price)
到:
Product.create({ name: name, price: price })
答
退房的smarter_csv宝石。
在它最简单的形式,你可以这样做:
SmarterCSV.process('tmp/products.csv').each do |hash|
Product.create(hash)
end
smarter_csv添加到您的Gemfile,所以当你在你的Rake任务所需要的环境,这是自动加载
这给了你:
namespace :import do
desc 'imports data from given csv file'
task :data, [:filename] => :environment do |t, args|
fail "File not found" unless File.exists? args[:filename]
options = {} # add options if needed
SmarterCSV.process(args[:filename], options).each do |hash|
Product.create(hash)
end
end
end
这样称呼它:
rake import:data['/tmp/products.csv']
当我加入CSV.foreach(Rails.root.join( 'TMP', 'products.csv'))做|行|错误消失,但我收到另一个错误NameError:未初始化的常量Product?我能做些什么来解决这个问题? – eNN 2014-09-13 04:03:53
您的产品型号未找到。您已经加载Rails环境,那么您是否定义了产品模型? – infused 2014-09-13 04:05:20
我有一个product.rb但我没有定义任何方法。我错过了什么。对不起,如果我询问基本问题 – eNN 2014-09-13 04:09:19