2010-12-12 71 views
1

我正在開發一個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相關。

謝謝!

編輯:我仍然不知道這裏出了什麼問題,但我設法通過遍歷一些作者,然後讓他們對隨機帖子發表評論,從而實現它。我認爲,這個解決方案更適合嘲笑數據。

+0

你有沒有考慮使用內置DB:是種子軌功能提供? – 2010-12-12 04:39:01

+0

你可以發佈你的耙子任務嗎?我的預感是,你的Rake任務不取決於environment。你的任務應該是這樣的: task:populate =>:environment do SomeClass.make_comments end – icecream 2010-12-12 04:47:24

+0

@violet我確實有適當的環境設置,但顯然@ Beerlington對新限制語法的建議確實解決了問題。 – maxluzuriaga 2010-12-12 13:57:37

回答

1

會發生什麼事,如果你使用了Rails 3查詢語法而不是?:

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

這解決了這個問題!非常感謝,我甚至不知道Rails 3有這個新的語法! – maxluzuriaga 2010-12-12 13:54:46

+0

這只是冰山一角。簽出Rails指南http://guides.rubyonrails.org/active_record_querying.html – 2010-12-12 14:23:21

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

我仍然遇到同樣的錯誤 - 認爲這個問題可能只是Rake的一個bug。 – maxluzuriaga 2010-12-12 02:56:48