2010-12-12 78 views
1

Je développe une application Rails et, pour voir l'application avec du contenu de démonstration, j'ai créé une tâche de rake pour remplir la base de données avec des données factices. Le code correspondant est ici:Problème lors de l'exécution de Array dans Rails

def make_comments 
    Post.all(:limit => 100).each do |post| 
    6.times do 
     author = Author.find_by_id(rand(100) + 1) 
     content = Faker::Lorem::sentence(5) 
     author.comments.create!(
     :post_id => post, 
     :content => content 
    ) 
    end 
    end 
end 

Quand je lance ce code dans la console Rails, je n'ai aucun problème, mais lorsqu'il est exécuté par râteau (méthode est appelée à partir de la tâche « db: équipez »), je reçois le erreur:

rake aborted! 
You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.each 

Quel pourrait être le problème? Je cours Ruby 1.9.2, Rake 0.8.7, et Rails 3.0.3, si cela aide. Mon impression est qu'il y a un problème de récupération des messages de la base de données, mais comme je l'ai dit, je n'ai aucun problème lors de l'exécution de "rails console".

Toute aide sur cette question serait très appréciée! Je peux donner plus de détails sur ma configuration si nécessaire, mais le problème semble être lié à Rake/Rails.

Merci! Je ne sais toujours pas ce qui n'allait pas ici, mais j'ai réussi à le faire fonctionner en itérant à travers certains des auteurs et en les faisant commenter sur des messages aléatoires. Cette solution fonctionne mieux pour la simulation de données, je pense.

+0

Avez-vous envisagé d'utiliser la fonction interne db: fonctionnalité semences qui fournit des rails? –

+0

Pouvez-vous également publier votre tâche de commission? Mon intuition est, votre tâche Rake ne dépend pas de environment. Votre tâche devrait ressembler à ceci: tâche: remplir =>: environnement ne SomeClass.make_comments fin – icecream

+0

@violet J'ai eu les bons paramètres de l'environnement, mais apparemment @ suggestion de Beerlington de la nouvelle syntaxe limite a résoudre le problème. – maxluzuriaga

Répondre

1

Qu'advient-il si vous utilisez les Rails 3 syntaxe de requête à la place ?:

Post.limit(100).each ... 
+0

Cela a résolu le problème! Merci beaucoup, je ne savais même pas que Rails 3 avait cette nouvelle syntaxe! – maxluzuriaga

+0

C'est juste la pointe de l'iceberg. Commander les guides Rails http://guides.rubyonrails.org/active_record_querying.html –

1
Post.find(:all, :limit => 100).each do |post| 
+0

J'ai toujours la même erreur - je pense que le problème pourrait être un bug avec Rake. – maxluzuriaga