2016-08-11 6 views
0

私はMichael Hartlのレッスンチュートリアルに従っていて、理にかなっていないロードブロッキングを実行中です。Railsチュートリアルで定義されていないメソッド

私はUserクラスに新しいメソッドを追加しました:私はのような何かやるとき

def full_name 
    "test" 
end 

だから:未定義のメソッド `FULL_NAME」

えっ: test = User.new(name: 'Phil Collins', email: '[email protected]') test.full_name

を私はエラーNoMethodErrorを取得?これは完全にUserクラスのものです。私は何が欠けていますか?

+1

コンテキストがなくてもわかりません。あなたはRailsコンソールにいますか?再ロードまたは再起動しましたか? –

+0

はい私はレールコンソールです。コンソールを再起動してみましょう。奇妙なことですが、私はまだそのクラスの他のメソッドを実行することができます... – echoBr00tal

+0

その場で新しいメソッドを追加すると、レールコンソールのルールに反するのですか?あなたはそれを再び必要とする必要があります。意味をなさない私はCLIで何か経験を積んでいません。 – echoBr00tal

答えて

1

Railsはアプリケーションをロードするたびに、すべてのクラスをメモリにロードします。

RailsコンソールはRails.application.initialize!を呼び出し、アプリケーションの現在のコードをロードします。

Railsには、開発モード(特にバネ)で使用するための優れた機能が付属しています。

https://github.com/rails/spring

しかし、これが唯一の開発サーバではないコンソールのために動作します。

RailsがサーバーをロードするときにRails::Serverが定義されているため、区別があります。コンソールはRails::Consoleを定義します。

reload!を使用すると、コンソールでコードの変更を反映する方法があります。

これはコンソールのコード変更を反映しますが、キャッチがあります。

古いオブジェクトは変更されません。このため、test.reloadを使用する必要があります。

関連する問題