我在这个论坛上搜索了上述问题的解决方案,但我尝试的一切都没有用。基本上,我有一个模型库,在我的sqlite3数据库中有相应的库表。我有一个名为libraries.csv的csv文件,其中包含我要导入数据库的所有数据。
我在this page的第二个答案上尝试了这个方法,但它仍然无效。我确保在lib / tasks文件夹中创建我的rake文件'import_libraries.rake,我还将libraries.csv文件保存在该文件夹中,但我不断收到此错误消息:
耙子中止了!
不知道如何构建任务'import_libraries'(参见 使用--trace运行任务完全跟踪
这是我正在使用的当前代码:
require 'csv'
desc "Imports a CSV file into an ActiveRecord table"
task :import, [:filename] => :environment do
CSV.foreach('libraries.csv', :headers => true) do |row|
Library.create!(row.to_hash)
end
end
但是当我运行bundle exec rake import_libraries时,我收到上面的错误信息。
我做错了什么吗?我很感激你的帮助。感谢
修改的
我将rake文件从import_libraries.rake重命名为import.rake在运行bundle exec rake import时,我现在得到的错误信息是:
耙子流产了! UTF-8中的无效字节序列 C:/Users/username/rails_app_name/lib/tasks/import.rake:4:在`block in '任务:TOP => import(通过运行任务查看完整跟踪 与--trace)
答案 0 :(得分:1)
根据您所获得的错误以及您定义的任务,您应该致电:
bundle exec rake import #=> you're currently calling import_libraries which indeed doesn't exist
使用rake
,您可以根据您为任务指定的名称调用task
,而不是根据文件名称调用(请记住,每个rake文件中都有许多任务)。
答案 1 :(得分:0)
我终于通过使用此代码解决了这个问题:
namespace :csv do
desc "Import CSV Data"
task :import => :environment do
require 'csv'
csv_file_path = 'lib/tasks/libraries.csv'
CSV.foreach(csv_file_path, headers: true) do |row|
row = Library.create!({
:column_name1 => row[0],
:column_name2 => row[1],
:column_name3 => row[2],
.
.
:last_column => row[6]
})
puts "Success!"
end
end
end