Posted at

Rails consoleでreload!する場合の注意点

More than 5 years have passed since last update.

reload!コマンドを使った時に、ちょっとハマったエピソードです。


ある日のできごと

あるModelを作りました。

class Hoge < ActiveRecord::Base

def foo
'Hello'
end
end

rails cでRailsのコンソールを立ち上げながら、Modelの挙動を確認しました。

> x = Hoge.find 1

> x.foo
=> "Hello"

ちょっと訳あってメソッドを修正しました。

class Hoge < ActiveRecord::Base

def foo
'Bye'
end
end

コンソールを再起動するのは面倒なので、Google先生に尋ねたところ、reload!と打てば良いと教えてもらいました。

> reload!

Reloading…
=> true

では、動作確認。

> x.foo

=> "Hello"

あれ?変わってない・・・。

悩むこと数十分。そしてギブアップ。

そこで隣にいた松村先生に質問したところ、reload!した後に、オブジェクトの再ロードも必要になると教えてもらいました。

> x = Hoge.find 1

> x.foo
=> "Bye"

というわけで、reload!だけではなく、すでに読み込まれているオブジェクトに対してはそちらも再ロードが必要になります。

ちなみにオブジェクトに対してreloadメッセージを送ってもダメです。

> x.reload

> x.foo
=> "Hello"

以上、Rails初心者の方はご注意を!