2012-06-27 45 views
15

我只是得到了Rails控制檯的竅門,並發現它對於在我的類中快速測試方法很有用。我知道我可以改變我的模型,然後什麼原因「重新加載!」似乎並不總是在Rails控制檯中工作?

> reload! 

抓住這些更新,但有時我會發現,它似乎沒有重裝我最新的代碼。 Rails是否在某處緩存代碼?

在一個非常簡單的僞例如,我可能對線路100錯誤代碼:

100: u = User.alll 

,並在Rails的控制檯,當我運行這個方法,我可能會得到類似的錯誤:

NoMethodError: undefined method `alll' for User:Class ... on line 100 

然後修改我的代碼,修復錯誤

100: u = User.all 

然後重新裝入:

> reload! 

,然後調用這個類有正確的代碼的方法時,它仍然會說

NoMethodError: undefined method `alll' for User:Class ... on line 100 

明確時,誤差是固定的,有問題的線是連在線100了。有沒有辦法強制/硬重置「重新加載!」命令?

回答

22

我的猜測是,你正在做的事情,如:

  1. 上的實例
  2. 你得到一個錯誤創建User
  3. 呼叫someMethod的一個實例,你去解決它
  4. reload!
  5. 您對現有的實例調用someMethod並再次得到錯誤

所以你調用一個實例本身沒有重新加載的方法。它的類已經重新加載,但實例已經在內存中 - 包含bug和所有內容。

這將是我的猜測至少(不是100%肯定)。

要點是,如果您在之後創建了一個新實例並且在該新實例上調用您的方法,它應該停止抱怨。

+0

是的,這正是問題所在。您創建的實例不會「重新加載」。在重新加載並重新實例化之後,每次工作都很棒。謝謝@flambino – jbnunn

相關問題