はじめに
画像を投稿するページで、画像未選択のままプレビュー画面を開くとエラーになりました。

Rendered shared/_media_image.html.slim (11.0ms)
Completed 500 Internal Server Error in 34ms (ActiveRecord: 2.4ms)
ArgumentError - Nil location provided. Can't build URI.:
app/views/shared/_media_image.html.slim:5:in `_app_views_shared__media_image_html_slim__178274656501430523_2417732900'
app/models/article.rb:76:in `block in build_body'
app/models/article.rb:70:in `build_body'
app/controllers/admin/articles/previews_controller.rb:8:in `show'
サーバのエラーログから_media_image.html.slim
とapp/models/article.rb
とapp/controllers/admin/articles/previews_controller.rb
が怪しいことが分かります。
if文を使用
最終的にレンダリングされているshared/_media_image.html.slim
を見てみると、画像がない場合を想定していないコードでしたので、if文を用いて条件分岐しましょう。
ruby:
medium = local_assigns[:medium]
- if medium.image_url # 追加
.media-image
= image_tag medium.image_url(:lg)
下記のように記載すると判定結果がelseの場合に空のmedia-image
タグが生成されてしまうのでNGです。
.media-image
- if medium.image_url
= image_tag medium.image_url(:lg)
コメント