我正在开发一个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