2016-02-24 2 views
2

Ceci est la première fois que j'importe un fichier csv dans mon application rails.Rails error Importation constante non initialisée csv

J'ai le code ci-dessous dans /lib/tasks/import.rake

require 'csv' 
     CSV.foreach("lib/articles.csv", headers: true, encoding: "ISO8859-1") do |row| 
      Article.new(title: row["Title"], body: row["Body"], user: User.find(1)) 
    end 

Quand je lance rake import:articles

Je reçois cette erreur:

 NameError: uninitialized constant Article 
    /Users/justinMgrant/code/hrsurvival/lib/tasks/import.rake:8:in `block in <top (required)>' 
    /Users/justinMgrant/code/hrsurvival/lib/tasks/import.rake:7:in `<top (required)>' 
    /Users/justinMgrant/.rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/engine.rb:658:in `block in run_tasks_blocks' 
    /Users/justinMgrant/.rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/engine.rb:658:in `each' 
    /Users/justinMgrant/.rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/engine.rb:658:in `run_tasks_blocks' 
    /Users/justinMgrant/.rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/application.rb:452:in `run_tasks_blocks' 
    /Users/justinMgrant/.rvm/gems/ruby-2.2.1/gems/railties-4.2.2/lib/rails/engine.rb:453:in `load_tasks' 
    /Users/justinMgrant/code/hrsurvival/Rakefile:6:in `<top (required)>' 
    (See full trace by running task with --trace) 

Toute idée de ce que je Je fais mal?

+3

Ajouter la tâche complète de râteau s'il vous plaît. J'imagine que vous n'utilisez pas 'task: taskname =>: environment' qui crée la tâche rake dans le contexte de votre environnement Rails. http://stackoverflow.com/questions/7044714/whats-the-environment-task-in-rake – max

+0

C'est ce que j'ai dans la tâche rake, mais quand j'ajoute 'task articles:: environment', cette erreur apparaît' Don ' t savoir comment construire la tâche 'import: articles' (voir --tasks) ' – jgrant

+0

C'est l'intégralité de votre fichier de rake? – jeffdill2

Répondre

1

Le problème est que vous ne définissez pas réellement votre tâche dans votre rakefile. Cela devrait fonctionner pour que vous puissiez exécuter rake import:articles.

namespace :import do 

    desc 'An optional description for what the task does' 
    task :articles => :environment do 
    # your code goes here 
    end 

end 

rake import:articles dit à chercher une tâche appelée articles dans un espace de noms appelé import, ce qui est la raison pour laquelle l'espace de noms est nécessaire pour ce que vous êtes en train d'essayer. Et comme @max mentionné, en utilisant task :articles => :environment est ce qui indique la tâche à exécuter dans le contexte de votre environnement Rails, ce qui rendrait votre modèle Articles et tout autre modèle à votre disposition dans cette tâche.

+0

Merci pour votre aide, Jeff! Cela a fonctionné parfaitement. – jgrant

+0

Génial! Content que ça marche pour toi. :-) – jeffdill2