這是一個令人費解的例子如此忍受我:錯誤(命名)作用域
我有一個腳本,我開發過程中經常使用,這將消滅我的我的開發和測試數據庫的表,重新遷移,然後再種上它們。由於我在幾個地方使用了觸發器,我不得不使用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