Rails 4.1.7 Ruby 2.1.4
我正在尝试通过控制器方法将CSV文件上传到我的应用程序:
的routes.rb
get 'csv_upload', to: 'users#csv_upload'
users_controller.rb def csv_upload
require 'csv'
customers = CSV.read('customers.csv')
customers = CSV.parse(csv_text, :headers => true)
customers.each do |row|
Moulding.create!(row.to_hash)
end
redirect_to users_url
end
CSV文件customer.csv
gender ,age
10,20
11,20
12,20
13,20
14,20
15,20
它位于根目录中。这是我得到的错误:
Errno::ENOENT in UsersController#csv_upload
No such file or directory @ rb_sysopen - customers.csv
Extracted source (around line #72):
70
71
72
73
74
75
customers = CSV.read('customers.csv')
customers = CSV.parse(customers, :headers => true)
Rails.root: /Users/andreucasadella/rails_projects/hackcdmx
答案 0 :(得分:2)
例外说文件无法找到。
customers = CSV.read('customers.csv')
是一条相对路径。它搜索当前工作目录中的文件(可能不总是在root中)。您可以使用例如:
raise Dir.getwd.to_s
customers = CSV.read('customers.csv')
并且异常将显示搜索到的文件中的当前文件夹。
为避免这种情况,您最好直接使用Rails.root
指定路径,例如:
customers = CSV.read(Rails.root.join('customers.csv'))
答案 1 :(得分:0)
我终于得到了一项任务:
LIB /任务/ task.rake
namespace :tasks do
require 'csv'
desc "cargar usuarios"
task :load_usuarios => :environment do |t, arg|
user_files =['lib/datasets/customers.csv']
user_files.each do |user|
CSV.foreach(user,:headers => true) do |row|
id = row.to_hash['id']
gender = row.to_hash['gender']
age = row.to_hash['age']
User.create(id: id,gender: gender,age: age)
end
end
end
end
创建一个名为“datasets”的文件夹,并在此处保存文件“customer.csv”:
app/lib/datasets/customer.csv
然后通过终端
执行任务rake tasks:load_usuarios
轰!就绪