【Rails】オブジェクトの中身が存在するか判定する

オブジェクトの中身が存在するか判定する

スポンサーリンク

RailsのViewではデータの有無によって出し分けを行いたい場合がかなりあります。

例えば、あるモデルのカラムにデータが存在していればそのデータを出力し、もし無い場合は「データがありません」と表示するようなケースがよくありますね。

このような場合、モデルのカラムにデータが存在するかをViewで判定する必要があります。
そのためには「データがあるか?」という判定にオブジェクトの present? メソッドを使用します。

<% @posts.each do |post| %>
  <% if post.image.present? %>
    画像あり: <img src="<%= image.url %>" alt="">
  <% else %>
    画像はありません。
  <% end %>
<% end %>

上記のように、 post.image.present? と判定すれば image カラムにデータが存在するかどうかがわかります。

またオブジェクトにはその逆の意味の、「データが空か?」を判定するメソッドも提供されています。
データが空か判定するには blank? メソッドを使用します。
先ほどのpresent?のコードを書き直してみましょう。

<% @posts.each do |post| %>
  <% if !post.image.blank? %>
    画像あり: <img src="<%= image.url %>" alt="">
  <% else %>
    画像はありません。
  <% end %>
<% end %>

こちらは空かどうかを判定するので、画像があるかというのは ! を利用して blank? メソッドがfalseを返すかどうかを確認します。

上記の書き方だと、否定があることで少し回りくどいので次のように書くとわかりやすいです。

<% @posts.each do |post| %>
  <% if post.image.blank? %>
    画像はありません。    
  <% else %>
    画像あり: <img src="<%= image.url %>" alt="">
  <% end %>
<% end %>

最後におまけです。
if の代わりに unless を利用することもできますが、else 句が書けないので柔軟性に欠けます。

<% @posts.each do |post| %>
  <% unless post.image.blank? %>
    画像あり: <img src="<%= image.url %>" alt="">
  <% end %>
<% end %>

状況に応じて使い分けてください。

プログラミング学習につまづいていませんか?

自分の力で勉強していく独学は大変です。ゼロからだとなおさら辛いはず。

一人でやっていると、誰かに教えてもらいたい、もっと効率的にプログラミングを学びたい、という場面が必ずあります。

ということならばスクールを検討してみてはいかがでしょう。

オンラインで完結するプログラミングスクール「TECH::CAMP」

TECH::CAMP

TECH::CAMPは人気・評判がともに高く、月額12,800円から受講できるオンライン対応のプログラミングスクールです。

TECH::CAMPでは、ネットで受講できて講師にも質問し放題なので、好きなときに必要な知識を重点的に勉強できます。
オンラインスクールを利用すれば、住んでる場所に関係なくプログラミングスキルが磨けますよ

独学がちょっと苦しくなってしまった……という方は、オンラインでの受講を考えてみてはいかがでしょうか。

オブジェクトの中身が存在するか判定する