NoMethodError: undefined method for nil:NilClass
Rubyでnilオブジェクトにメソッドを呼び出した際に発生するエラー
概要
Rubyでnilオブジェクトにメソッドを呼び出そうとするとNoMethodErrorが発生します。
エラーメッセージ
NoMethodError: undefined method `length' for nil:NilClass
原因
- 変数がnilのまま使用: 初期化されていない、または値がnilの変数にメソッドを呼び出している
- メソッドの戻り値がnil: findやfirstなどが結果を見つけられずnilを返した
- Hash/Arrayのキーが存在しない: 存在しないキーにアクセスしてnilが返った
解決策
1. Safe Navigation Operator(&.)を使用
| |
2. nilチェックを追加
| |
3. ||演算子でデフォルト値を設定
| |
4. dig メソッドを使用(Hash/Array)
| |
5. fetch メソッドでデフォルト値
| |
よくある間違い
- findメソッドの戻り値をチェックせずに使用
- params[:key]の存在確認なしでアクセス
- 関連付けられたオブジェクトがnilの場合を考慮していない
Ruby の他のエラー
この記事は役に立ちましたか?