binding.pryを理解して使わないと、binding.pry自体がエラーを起こすよ、という話です。
私はデバッグ時、"binding.pry"を使い倒していました。
そんな時、下記のコードをデバッグすることになりました。
article_blocks.each do |article_block|
result << if article_block.sentence?
sentence = article_block.blockable
sentence.body = "test"
binding.pry
elsif article_block.medium?
・
・
・
end
条件に照らし合わせて処理を行い、処理結果を変数"result"に格納していくというコードです。
しかし、このコード部分で以下のようなエラーが帰ってきました。
TypeError - no implicit conversion of nil into String:
resultに入る値である「sentence.body」には既に"test"という文字列(仮にtestにしています)が入っているため、nilを格納しようとしているわけではありません。なのに何故…(・・?)
結論として、原因は下記の通りでした。
binding.pry自体が返り値としてresultに格納されようとしていたため
そもそもrubyでは、if文のブロックの最終行が返り値として返されます。(returnとかをブロック途中で使った場合はその限りではない)
しかし上記コードでは、binding.pry」自体にはなんの値もセットしていません。(binding.pry自体はnilとなっています)
結果、if文の最終行にあった「binding.pry」が返り値として見られてしまい、resultにnilを格納しようとしたためエラーがでた次第です。
if文の文法ルール、binding.pryが何者かをきちんと理解していればこんなコードは書いていないので、自戒の念も込めて、備忘録として残しました。
まあ私以外にこんな基本的なミスをする人はいないかと思いますが、それでも誰かの役に立てれば幸いです。
(☝︎ ՞ਊ ՞)☝︎