在Rails中迭代Array时遇到问题

时间:2010-12-12 01:29:03

标签: ruby-on-rails arrays activerecord rake null

我正在开发一个Rails应用程序,为了看到带有一些演示内容的应用程序,我创建了一个rake任务,用一些虚拟数据填充数据库。相关代码在这里:

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运行时(从任务“db:populate”调用方法),我收到错误:

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 console”中运行时没有问题。

非常感谢您对此问题的任何帮助!如果需要,我可以提供有关我的设置的更多详细信息,但问题似乎与Rake / Rails有关。

谢谢!

编辑:我仍然不知道这里出了什么问题,但我设法通过迭代一些作者然后让他们评论随机帖子来实现它。我认为,这种解决方案也可以更好地模拟数据。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果您使用Rails 3查询语法会发生什么?:

Post.limit(100).each ...