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.
Avez-vous envisagé d'utiliser la fonction interne db: fonctionnalité semences qui fournit des rails? –
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@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