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初心者の方はご注意を!