我正在開發一個Rails應用程序,爲了用一些演示內容查看應用程序,我創建了一個rake任務,用一些虛擬數據填充數據庫。相關的代碼是在這裏:通過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
當我運行在Rails的控制檯這段代碼,我沒有問題,但是當通過耙運行(方法是從任務稱爲「分貝:填充」),我得到的錯誤:
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
可能是什麼問題?我運行的是Ruby 1.9.2,Rake 0.8.7和Rails 3.0.3,如果有幫助的話。我的印象是,從數據庫中檢索帖子時出現了一些問題,但正如我所說的,在運行「rails控制檯」時沒有問題。
對這個問題的任何幫助將非常感謝!如果需要,我可以提供有關我的設置的更多詳細信息,但問題似乎與Rake/Rails相關。
謝謝!
編輯:我仍然不知道這裏出了什麼問題,但我設法通過遍歷一些作者,然後讓他們對隨機帖子發表評論,從而實現它。我認爲,這個解決方案更適合嘲笑數據。
你有沒有考慮使用內置DB:是種子軌功能提供? – 2010-12-12 04:39:01
你可以發佈你的耙子任務嗎?我的預感是,你的Rake任務不取決於
environment
。你的任務應該是這樣的: task:populate =>:environment do SomeClass.make_comments end – icecream 2010-12-12 04:47:24@violet我確實有適當的環境設置,但顯然@ Beerlington對新限制語法的建議確實解決了問題。 – maxluzuriaga 2010-12-12 13:57:37