9
> rvm list
rvm rubies

=* ruby-1.9.2-p290 [ i686 ]
   ruby-1.9.3-p194 [ i686 ]

> rails -v
Rails 3.1.1

関連するが答えなかった: Is there a Rails Console command (Rails 3+) to reload changed code?

Rails コンソールを使用して、モデル内のメソッドが呼び出されない理由を突き止めようとしています。モデルは ./app/models/product.rb にあります。self.trim_historyメソッドを asと呼ばれるものから に変更していtrim_historyます。self.do_stuffメソッドを asまたは justとして呼び出すタイミングについては、まだ頭を悩ませていdo_stuffます。

これを理解する過程で、私は問題に遭遇しましたreload!。私の理解では、reload!すべてのモデルとコントローラーが再度読み込まれますが、機能していないようです。コードをデバッグすると、変更した行がデバッガーにdo_stuff表示されたままになります。self.do_stuff

これを解決しようとしましたがreload!、修正はありません。リロード後にデータベースからオブジェクトをリロードしましたが、修正されません。でモデルを直接load './app/models/product.rb'ロードしてから、データベースからオブジェクトをロードしましたが、修正はありません。オブジェクトが で変更されていることを確認しましたtail

Railsコンソールでモデルをリロードする最良の方法は何ですか? モデル コードが変更されるたびに、コンソールを再起動する必要がありますか? コンソールをリロードせずに既存のモデルとそのコードをすべてダンプする方法はありますか?

編集:これは見知らぬ人になりました。コードがリロードされていると思われますが、デバッガーは新しいコードを反映していません。コードをステップ実行すると、古いコードはそこにありますが、新しいコードが実行されています。raise--を追加してこれをテストしましraiseたが、デバッガーには表示されませんが、発生します。ワット?

リロードされたコードを表示するためにデバッガーで行う必要があることはありますか? これはバグのように見えます...

4

1 に答える 1

21

reload!既存のオブジェクトを再初期化せず、コードをリロードするだけです。クラスの新しいインスタンスを作成すると、変更が反映されます。

于 2012-05-05T19:43:42.523 に答える