nil(値が無いことを表す特別な値)に対して、通常のオブジェクトのようにメソッドを呼ぶと出ます。ハッシュや配列に無いキーを読んだ結果が nil になり、それに気づかず次の処理を続けてしまうのが典型パターンです。
出るコード
user = { name: "Aoi" }
puts user[:age].upcase # :age キーは無いので nil が返る
エラーメッセージ
undefined method 'upcase' for nil:NilClass (NoMethodError)
直し方
まず値が nil でないかを確認します。&.(ぼっち演算子)を使うと nil のときは自動的に nil を返し、エラーになりません。
puts user[:age]&.upcase # nil ならそのまま nil