我对使用CSV将数据导入SQL数据库的概念非常陌生。我已经关注了一些stackoverflow帖子,但我收到了错误消息。运行Errno::ENOENT: No such file or directory @ rb_sysopen - products.csv
后,错误会显示 rake import:data
。我的application.rb中需要csv以及我创建了一个csv文件并将其放在TMP中。到目前为止,这是我的代码。
我知道我可能会从社区中寻求很多,但如果有人回答这个问题,你能否提供一些关于CSV和rake函数的更多见解。非常感谢!!!
<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
答案 0 :(得分:0)
指定CSV文件的完整路径。
例如,如果文件位于/tmp/
中,则使用:
CSV.foreach('/tmp/products.csv') do |row|
如果products.csv
文件位于您的应用程序tmp
目录中,请使用:
CSV.foreach(Rails.root.join('tmp', 'products.csv')) do |row|
答案 1 :(得分:0)
我碰到了类似的东西,它忘了把两个括号括在括号中,所以你可能想试试去:
Product.create( name: name, price: price )
为:
Product.create({ name: name, price: price })
答案 2 :(得分:0)
查看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']