0

上記の問題の解決策をこのフォーラム全体で検索しましたが、試したすべてが機能しませんでした。基本的に、私は sqlite3 データベースに対応するライブラリ テーブルを持つモデル ライブラリを持っています。データベースにインポートするすべてのデータを含む libraries.csv という名前の csv ファイルがあります。

このページの 2 番目の回答の方法を試しましたが、まだ機能していません。rake ファイル 'import_libraries.rake を lib/tasks フォルダーに作成し、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: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

ファイルの名前ではなく、タスクに付けた名前に基づいてrakea を呼び出します (これらの各 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 に答える