この記事のまとめ
-
URI.encode
メソッドの引数にnil渡すとundefined method 'gsub' for nil:NilClass
エラーが出る -
URI.encode
ではnil避けがされない -
URI.encode
自体が非推奨なのでURI.encode_www_form_component
を使おう
実際に起こった問題
-
URI.encode
メソッドで、URLをエンコーディングしようとした - しかし500エラーが発生した。
- スタックトレース見ると、
undefined method 'gsub' for nil:NilClass
が出ていた
該当コード:
url = post.url
post.url #nil
URI.encode(post.url) #undefined method 'gsub' for nil:NilClass
対応
-
URI.encode_www_from_component
を代わりに使おう- 実は
URI.encode
自体もう使うなと言われているらしい。 -
URI.encode_www_form_component
を使う場合は、nil入れてもnilが返ってくる
- 実は
URI.encode(nil) # => NoMethodError: undefined method `gsub' for nil:NilClass
URI.encode_www_form_component(nil) # => ""
- 何かしらの諸事情でURI.encodeを使う場合、nilよけして使うしかないかも。