プレビューを押すと下記のエラーが発生。

Untitled

Untitled

TypeError (no implicit conversion of nil into String)というエラーは、nilが文字列として変換されようとしたときに発生する。

このエラーが発生している箇所を具体的に見ると、app/models/article.rb71行目と70行目で何かがnilになっていることが原因。さらに、app/controllers/admin/articles/previews_controller.rb8行目でも関連する操作が行われているようだ。

1. Articleモデルのbuild_bodyメソッドを確認する

Untitled

エラーメッセージから推測するに、article_block の中で nil が含まれている可能性があります。具体的には、article_blocknil の場合、NoMethodError が発生します。これは、nil に対してメソッドを呼び出そうとした際に発生するエラーです。

存在チェックを追加する:

article_blocknilでないことを確認するために、存在チェックを追加します。

def build_body(controller)
    result = ''

    article_blocks.each do |article_block|
      if article_block.present?
        result << if article_block.sentence?
                    sentence = article_block.blockable
                    sentence.present? ? (sentence.body || '') : ''
                  elsif article_block.medium?
                    medium = article_block.blockable
                    if medium.present?
                      decorated_medium = ActiveDecorator::Decorator.instance.decorate(medium)
                      controller.render_to_string("shared/_media_#{decorated_medium.media_type}", locals: { medium: decorated_medium }, layout: false)
                    else
                      ''
                    end
                  elsif article_block.embed?
                    embed = article_block.blockable
                    if embed.present?
                      decorated_embed = ActiveDecorator::Decorator.instance.decorate(embed)
                      controller.render_to_string("shared/_embed_#{decorated_embed.embed_type}", locals: { embed: decorated_embed }, layout: false)
                    else
                      ''
                    end
                  else
                    ''
                  end
      end
    end

    result
  end

この修正で、sentence.bodynilの場合や、blockablenilの場合でもエラーが発生しないようにする。

⚠️これではおそらくlintチェックで引っ掛かるはずなので、書き換えます。