質問: User.new(image_name: "default_user.jpg") ``` 上記の例にて、show.html.erbでは「@user.image_name」でエラーが出ないのですが、index.html.erbでは「user.image_name」でないとエラーが出てしまいます。 私としてはどちらも@userが正解に見えるのですが... すみませんが、なぜこのような違いが出るのか、ご存知の方ご教授お願いします。
回答: まだ未解決でしょうか?解決済でしたら読み飛ばしてください。 ソースが追加されるのを待ってるうちに忘れてました。ソースがないので、「多分こうなってるだろう」という予測で書きます。 まず、@userですが、「@userと書くと、必要なときに期待するデータが手に入る万能の召喚呪文」ではありません。使う前に予め必要な値を代入しておく必要があります。その意味では @userもuserも違いはありません。 違いは二つ。 userは、未定義で使うと Undefinedの例外で止まります。またそれが定義されたmethodの中でのみ有効です。 @userは未定義の場合 nil として扱われるます。またそのクラス(のそのインスタンス)の中ならどのmethodでも使えます。 加えてcontrollerで定義した時は「そのアクションで呼びだされた」viewでも使えます。 ですから @userが正しいのかuserが正しいのか、は「どちらに必要な値を代入してあるか」で決まります。 view show では controllerのshowで@user=User.find(params[:id])としていると思います。ですから @userが正解です。 view indexでは controllerのindexで @users=Usr.all の様に『**複数形**の』@usersに代入し、viewの方で @users.each do |user| としているとおもいます。@user は定義されておらず、user が定義されているので user が正解です。