Help us understand the problem. What is going on with this article?

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

jnchito
SIer、社内SEを経て、ソニックガーデンに合流したプログラマ。 「プロを目指す人のためのRuby入門」の著者。 http://gihyo.jp/book/2017/978-4-7741-9397-7 および「Everyday Rails - RSpecによるRailsテスト入門」の翻訳者。 https://leanpub.com/everydayrailsrspec-jp
https://blog.jnito.com/
sonicgarden
「お客様に無駄遣いをさせない受託開発」と「習慣を変えるソフトウェアのサービス」に取り組んでいるソフトウェア企業
http://www.sonicgarden.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away