記事にテキストのコンテンツブロックを挿入後、テキストを何も入力せずにプレビューページを閲覧すると、以下のエラーが発生する。
TypeError - no implicit conversion of nil into String:
訳 nilからStringへの暗黙の変換がない
TypeErrorとは
<aside> 💡 メソッドの引数に期待される型ではないオブジェクトや、期待される振る舞いを持たないオブジェクトが渡された時に発生します。
</aside>
解決策
app/models/article.rb
result << if article_block.sentence?
sentence = article_block.blockable
sentence.body ||= '' #今回はここを変える!
元々、sentence.bodyだけだとnill型なので sentence.body ||= ''のようにする。
||=は自己代入やnilガードと呼ばれるそうです。 左辺がnilまたはfalseの場合は右辺が代入され、それ以外の場合は代入はされません。 sentence.bodyに「テスト」と入力して確認してみます。 入力されているのでnilにはならないはずです。
binding.pryをしてnil?メソッド(sentence.body.nill?で確認する)でfalseが返ってきたのでsentence.bodyはnilではないことがわかります。 nilではないので右辺の''(空の文字列)は代入されず「テスト」となっていることがわかる。
参考