【Rails】画像投稿機能において画像を投稿していないときに代替画像を表示させる方法


前提

・CarrierWaveは導入済み
・登録した画像表示はできる

はじめに

画像投稿機能において画像を投稿していないときに代替画像を表示させる方法を記します。
基本的にはCarrierWaveを使ってデフォルト画像を設定すれば画像を投稿していないときに代替の画像を表示させることができます。ただ、アップロードする必要がある画像部分が全部同じデフォルト画像になってしまいます。アップロードにより表示させる画像に見境なく用意した画像を使用してしまう為、表示にそぐわない部分にも適用されてしまう可能性があります。

if文を使って画像を投稿していないときに代替画像を表示させることで、上記の問題を解決したので自らのメモとして残しておきます。

手順

まず、image_tagで画像を表示させるコードを記述。

<% @posts.each do |p| %>
     
     
<%= image_tag p.image_url %>
     
     
<% end %>

そして、代替画像を表示させるコードも準備します。

<%= image_tag "no_imageとか書かれた代替画像" %>

そして下記のようにif文で記述する。

<% if p.image.present? %>
  <%= image_tag p.image_url %>
<% else %>
  <%= image_tag "no_imageとか書かれた代替画像" %>
<% end %>

presentメソッドを使って、p.imageに画像が入っていればユーザーから投稿された画像を表示し、画像が入っていなければこちら側が準備した代替画像を表示させるようにしています。

参考記事

【Rails】image_tagの基本とデフォルト画像の設定方法