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


TypeError (no implicit conversion of nil into String)というエラーは、nilが文字列として変換されようとしたときに発生する。
このエラーが発生している箇所を具体的に見ると、app/models/article.rbの71行目と70行目で何かがnilになっていることが原因。さらに、app/controllers/admin/articles/previews_controller.rbの8行目でも関連する操作が行われているようだ。
Articleモデルのbuild_bodyメソッドを確認する
エラーメッセージから推測するに、article_block の中で nil が含まれている可能性があります。具体的には、article_block が nil の場合、NoMethodError が発生します。これは、nil に対してメソッドを呼び出そうとした際に発生するエラーです。
存在チェックを追加する:
article_blockがnilでないことを確認するために、存在チェックを追加します。
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.bodyがnilの場合や、blockableがnilの場合でもエラーが発生しないようにする。
⚠️これではおそらくlintチェックで引っ掛かるはずなので、書き換えます。