Nil location provided. Can't build URI.の解決法


前提・実現したいこと

転職活動用ポートフォリオとしてダイエットアプリを開発中。
画像一覧ページに画像を表示させたい。

発生している問題・エラーメッセージ

Nil location provided. Can't build URI.

画像一覧ページでcurrent_userが投稿したpostの画像を表示しようとしたら、
このエラーが出た。

「画像がnil(ない)なので、画像のURLが作れないよ」と言ってる。


確かに指摘されたとおり、データベースには画像なしの投稿が複数保存されている。

どうやらこれが原因らしい。

該当のソースコード

posts_controller.rb
posts_controller.rb
  def image
    @posts = Post.where(user_id: current_user.id)
  end

  private
  def post_params
    params.require(:post).permit(:food, :calorie, :protein, :fat, :carbo, :text, :image, :weight).merge(user_id: current_user.id)
  end
image.html.haml
image.html.haml
.content
  .images
  - @posts.each do |post|
    = image_tag post.image.url, class: "my-images"

解決法

画像ありのpostだけ取得する。

posts_controller.rb
posts_controller.rb
  def image
    @posts = Post.where(user_id: current_user.id).where.not(image: nil)
  end

これでimageカラムがnilのpostは取ってこないように指定したら解決した。

できあがった画像一覧ページ

参考記事:[Rails]Where句にNOT NULLを指定する