Programming Journal

学習したことの整理用です。

【Rails】ArgumentError - Nil location provided. Can't build URI エラーが出たら

エラーで悩んだのでメモ
画像を投稿するページで、画像を選択しないでプレビュー画面を開こうとすると以下のエラーになりました。

エラー画面

ArgumentError - Nil location provided. Can't build URI

f:id:Study-Diary:20201002135409p:plain
ArgumentError

ArgumentError - Nil location provided. Can't build URI.:
  app/views/shared/_media_image.html.slim:5:in `_app_views_shared__media_image_html_slim___195936332176276977_70365205560160'
  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:9:in `show'

View修正

画像がなかった場合を想定していないコードだったので、エラーが出てしまいました。
改善方法は2つありますが、今回は①を選択しました。
image_tagがあるときだけrenderされる
image_urlにデフォルト値を設定しておく

#①
- if medium.image_url #追加
  .media-image
    = image_tag medium.image_url(:lg)

#②
= image_tag medium.image_url || default_image 

※最初、ifを中に入れ込んでしまったけど、これだと、elseのときにmedia-imageに空タグが入ってしまうのでNG

.media-image
  - if medium.image_url
    = image_tag medium.image_url(:lg)

参考

Argument Error Nil location provided. Can't build URI for an image_tag using carrier wave Ruby on Rails - Stack Overflow

ArgumentError Nil location provided. Can't build URI. が出た時の対処法 プロフ画像の実装 | びんぼーろく