这是一个令人费解的例子如此忍受我:错误(命名)作用域
我有一个脚本,我开发过程中经常使用,这将消灭我的我的开发和测试数据库的表,重新迁移,然后再种上它们。由于我在几个地方使用了触发器,我不得不使用rake db:migrate RAILS_ENV = test来正确地迁移我的测试数据库。
一切都很好,直到我把我的测试环境中的config.cache_classes = true。然后,当耙子迁移运行在空数据库上时,我会得到一个关于该表不存在的错误。与--trace运行这个,我发现它在我的对象之一炸毁时声明了一个基本范围:
scope :find_by_route_and_date, lambda { |route_id, date|
{
:conditions=>{:route_id=>route_id, :schedule_date=>date}
}
}
范围是在一个lambda,所以它不应该得到评估,但当我删除cache_classes时,迁移工作正常。所以,对我来说,似乎它试图缓存模型,窒息了范围,因为该表尚不存在,并且从不开始迁移。
我在想我吗?其他人看过这个?如果我需要擦拭我的数据库,是否需要关闭缓存,然后迁移,然后再打开它?
的Rails 3.2,红宝石1.9.2,耙0.9.2.2
更新:
按照要求,这里是堆栈跟踪:https://gist.github.com/1705064
的order.rb:179是放置我的第一个范围的地方,以及我上面列出的爆炸点。
你得到了什么栈跟踪? – phoet 2012-01-27 23:15:10
编辑包含链接到要点的痕迹 – 2012-01-30 15:49:47
我觉得有点奇怪'order_controller.rb'在堆栈中。确定你没有在你的耙子任务中做一些疯狂的事情,那实际上是调用范围? – phoet 2012-01-30 18:10:06