2010-12-12 9 views
1

Ich entwickle eine Rails-Anwendung, und um die App mit einigen Demo-Inhalten zu sehen, habe ich eine Rake-Aufgabe erstellt, um die Datenbank mit Dummy-Daten zu füllen. Der entsprechende Code ist hier:Problem beim Iterieren durch Array in 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 

Wenn ich diesen Code in der Rails-Konsole laufen, ich habe keine Probleme, aber wenn man durch Rake läuft (Methode wird von der Aufgabe als „db: bevölkern“), erhalte ich die Fehler:

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 

Was könnte das Problem sein? Ich laufe Ruby 1.9.2, Rake 0.8.7 und Rails 3.0.3, wenn das hilft. Mein Eindruck ist, dass es ein Problem beim Abrufen der Posts aus der Datenbank gibt, aber wie gesagt, ich habe keine Probleme, wenn ich die "rails console" durchführe.

Jede Hilfe zu diesem Thema würde sehr geschätzt werden! Ich kann bei Bedarf weitere Details zu meinem Setup angeben, aber das Problem scheint mit Rake/Rails zu verknüpfen.

Danke!

Edit: Ich weiß immer noch nicht, was hier schief lief, aber ich schaffte es, es durch die Iteration durch einige der Autoren zu arbeiten und sie dann auf zufällige Beiträge kommentieren zu lassen. Diese Lösung funktioniert auch besser, um Daten nachzubilden, denke ich.

+0

Haben Sie darüber nachgedacht die eingebaute db mit: Saatgut-Funktionalität, die bietet Schienen? –

+0

Kannst du deine Rake-Aufgabe auch posten? Meine Ahnung ist, Ihre Rake-Aufgabe ist nicht abhängig von environment. Ihre Aufgabe sollte wie folgt aussehen: Aufgabe: bevölkern =>: Umwelt tut SomeClass.make_comments Ende – icecream

+0

@violet Ich habe getan, die richtigen Umgebungseinstellungen, aber anscheinend @ Beerlington Vorschlag der neuen Grenze Syntax hat das Problem zu beheben. – maxluzuriaga

Antwort

1

Was passiert, wenn Sie verwenden, um die Rails 3 Abfragesyntax statt ?:

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

Dies behebt das Problem! Vielen Dank, ich wusste nicht einmal, dass Rails 3 diese neue Syntax hatte! – maxluzuriaga

+0

Das ist nur die Spitze des Eisbergs. Überprüfen Sie die Rails Guides http://guides.rubyonrails.org/active_record_querying.html –

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

Ich habe immer noch den gleichen Fehler - denke, das Problem könnte nur ein Fehler mit Rake sein. – maxluzuriaga

Verwandte Themen