16

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行目にも表示されなくなります。「リロード」を強制/ハードリセットする方法はありますか?指図?

4

1 に答える 1

27

私の推測では、あなたは次のようなことをしていると思います。

  1. のインスタンスを作成しますUser
  2. someMethodインスタンスを呼び出す
  3. エラーが発生し、修正します
  4. reload!
  5. someMethod 既存のインスタンスを呼び出して、エラーを再度取得します

したがって、それ自体がリロードされていないインスタンスでメソッドを呼び出しています。そのクラスはリロードされましたが、インスタンスはすでにメモリ内にあり、バグなどがあります。

それは少なくとも私の推測です(100%確実ではありません)。

ポイントは、のに新しいインスタンスを作成し、reload!その新しいインスタンスでメソッドを呼び出すと、文句を言うのをやめる必要があるということです。

于 2012-06-27T23:16:37.523 に答える