[Rails] ArgumentError – Nil location provided. Can’t build URI エラーの解決

学習記録

はじめに

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

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.slimapp/models/article.rbapp/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)

コメント

タイトルとURLをコピーしました