2010-12-12 66 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