undefined method for nil:NilClassってなに?

これはとてもよく出会うエラーですね〜。
私も毎日のように出て来て悩まされましたTT

undefined method `name' for nil:NilClass

だったり、

undefined method `id' for nil:NilClass

など。
学びたての頃はさっぱりわからないエラー。


で、どういう意味なの?

たとえば

undefined method `name' for nil:NilClass

のメッセージを日本語に訳してみると
「nilに対してnameメソッドは定義されてませんよ」
となる。

つまり、nilに対してnameメソッドを使っちゃってるよ、という意味。

たとえば

user.name

というコードだった場合、レシーバであるuserがnil(つまり空っぽ)ということです。

じゃ確認してみよう

nameという変数に文字列を入れて、その長さを出力してみる。

2.4.0 :001 > name = "user_name"
 => "user_name" 
2.4.0 :002 > name.length
 => 9 



つづいて、変数nameにnilを入れてみる。

2.4.0 :005 > name = nil
 => nil 
2.4.0 :006 > name.length
NoMethodError: undefined method `length' for nil:NilClass

おぉぉ、出ましたね!
この場合はlengthの相手であるnameがnilなので 「nilに対しては処理できないよ」 ということでエラーを出しています。

で解決方法は?

もうこれは
「なんでnilになってしまっているのか」
を調べるしかないですね。

がんばりましょう!!!