Ruby on rails 在Rails中迭代数组时出现问题
我正在开发一个Rails应用程序,为了查看包含一些演示内容的应用程序,我创建了一个rake任务,用一些虚拟数据填充数据库。相关代码如下:Ruby on rails 在Rails中迭代数组时出现问题,ruby-on-rails,arrays,activerecord,rake,null,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.
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控制台”时没有问题
在此问题上的任何帮助都将不胜感激!如果需要,我可以提供更多关于我的设置的细节,但是这个问题似乎与Rake/Rails有关
谢谢
编辑:我仍然不知道这里出了什么问题,但我通过反复访问一些作者,然后让他们在随机帖子上发表评论,成功地解决了问题。我认为,这种解决方案在模拟数据方面也更有效。如果改用Rails 3查询语法,会发生什么
Post.find(:all, :limit => 100).each do |post|
Post.limit(100).each ...
我还是犯了同样的错误——认为问题可能只是Rake的一个bug。你考虑过使用rails提供的内置db:seed功能吗?你也可以发布你的Rake任务吗?我的直觉是,您的Rake任务并不依赖于
环境
。您的任务应该如下所示:task:populate=>:environment do SomeClass.make_commentsend@violet我确实有适当的环境设置,但显然@Beerlington建议的新限制语法解决了这个问题。这解决了这个问题!非常感谢,我甚至不知道Rails3有这种新语法!这只是冰山一角。检查导轨