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になってしまっているのか」
を調べるしかないですね。
がんばりましょう!!!