2012-05-05 14 views
6
> 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からtrim_historyに変更しています。私はまだself.do_stuffまたはちょうどdo_stuffというメソッドを呼び出すときに私の頭を包んでいる。

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

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

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

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

再ロードされたコードを表示するためにデバッガと何か関連がありますか?これはバグのようです...

+1

クラス自体またはクラスのインスタンスでメソッドを呼び出そうとしていますか? –

+0

@ChrisSchmitzクラスのインスタンス。私はそれを理解するまで、自己を使ってコードをつぶすことについて読んでいます。 – jcollum

+0

Rubyにはいくつかの異なるデバッガがありますが、どちらを使用しているのかを指定すると便利です。 –

答えて

16

reload!は、既存のオブジェクトを再初期化せず、コードをリロードします。クラスの新しいインスタンスを作成する場合は、変更を反映する必要があります。

+0

OP、おそらく私はあなたが思っている方法でオブジェクトを作成していませんか?私はdb: 'p = Product.by_name 'Acme Mop''から' Product.where(name:name).first'を呼び出すことで問題を解決できますか? – jcollum

+0

@jcollum彼は、彼らがどのように作成されているかは関連しているのではなく、むしろ* *であると言っているわけではありません。 'reload! 'を呼び出す前または後にオブジェクトを作成していますか? –

+0

再び@AndrewMarshall、OPでカバーされています。 'reload!'を呼び出した後にdbからオブジェクトをロードしていて、コードの変更がオブジェクトに反映されていません。 – jcollum