この記事のまとめ
-
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よけして使うしかないかも。