よく、下記のようなエラー分が出る。
こういうエラーが出現した時、「上記のエラー文をそのままインターネット検索をしてしまう”」と初心者の私は考えてしまいます。
調べてみても、”length” というメソッド自体が存在しており、不正な記述でもないため、意味がわからないくなってしまう。
上の画像のエラーは “undefined method” で、このエラーの読み方は “for” の後に記載されている “nil:NilClass” が重要です。
1:エラー文の解釈の誤り
①:誤った解釈:「”length” が使えない。“NilClass” はよくわからないので考えない。」
②:正しい解釈:「”nil” の変数に対して “length” メソッドを使おうとしている。変数が “nil” となってる原因を仮説・検証する必要がある。」
2:nil:NilClassとは
この場合、lengthが “NilClass” に対してダメだよ、と言われているので、“length” を使おうとしている変数の “str” が “NilClass” ということになります。
つまり、”str” の変数が NULL になってしまっているんです!
このケースは変数でしたが、渡されていない “params” に対して色々なメソッドを使おうとしても同じエラーが起きるケースはやりがちなので、気をつけましょう。
3:エラーの解決していく手順について
①変数がNULLとなる原因を探す。
②変数がNULLにならないように対処する。