0

我已经在这个论坛上搜索了上述问题的解决方案,但我尝试的一切都没有奏效。基本上,我有一个模型库,在我的 sqlite3 数据库中有相应的库表。我有一个名为 libraries.csv 的 csv 文件,其中包含我要导入数据库的所有数据。

我尝试了此页面上第二个答案的方法,但仍然无法正常工作。我确保在 lib/tasks 文件夹中创建了我的 rake 文件 'import_libraries.rake,并且我还将 library.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:in `block in ' Tasks: TOP => import 中的无效字节序列(通过使用 --trace 运行任务查看完整跟踪)

4

2 回答 2

1

根据您遇到的错误和您定义的任务,您应该调用:

bundle exec rake import  #=> you're currently calling import_libraries which indeed doesn't exist

根据您给任务的名称而不是文件的名称rake调用 a (请记住,每个 rake 文件中可以有许多任务)。task

于 2013-03-13T22:03:47.267 回答
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
于 2013-03-13T22:42:12.480 回答