【问题标题】:Problem while iterating through Array in Rails在 Rails 中遍历数组时出现问题
【发布时间】:2010-12-12 01:29:02
【问题描述】:

我正在开发一个 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 控制台”运行时我没有问题。

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

谢谢!

编辑:我仍然不知道这里出了什么问题,但我设法通过遍历一些作者然后让他们对随机帖子发表评论来使其工作。我认为这个解决方案也更适合模拟数据。

【问题讨论】:

  • 您是否考虑过使用 rails 提供的内置 db:seed 功能?
  • 您也可以发布您的 rake 任务吗?我的预感是,您的 Rake 任务不依赖于 environment。你的任务应该是这样的: task :populate => :environment do SomeClass.make_cmets end
  • @violet 我确实有正确的环境设置,但显然@Beerlington 对新限制语法的建议确实解决了这个问题。

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


【解决方案1】:

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

Post.limit(100).each ...

【讨论】:

【解决方案2】:
Post.find(:all, :limit => 100).each do |post|

【讨论】:

  • 我仍然遇到同样的错误 - 认为问题可能只是 Rake 的错误。
猜你喜欢
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多