売却されていないページに遷移されない‥


こんにちは!

最終課題でメルカリみたいなwebアプリケーションを
実装しています。
エラーが発生したので記事にしました。

NoMethodError

商品詳細ページにおいて売却済みなら画面に
sold out!!と表示されるように実装していました。

show.html.erb
<%if @item.id == @item.order.item_id %>
        <div class="sold-out">
          <span>Sold Out!!</span>
        </div>
      <% end %>

この記述で売却済みの商品詳細ページに遷移すると、
以下のように表示されホッとしてました。

しかし、売却されていない商品詳細ページへ
遷移しようとするとエラーが‥

このエラーで3時間泣きました。

エラーの原因

if文を使っているのになんでfalseの処理をしてくれへんねん!!
と泣きながら叫んでました。

そもそもshow.html.erbで記述した条件式だと、
odersテーブルにitem_idが存在している前提で
話を進めちゃってるのでエラーが出て怒られちゃったみたいです。
エラー文のちっちゃいところに

undefined method `item_id' for nil:NilClass

ってitem_idがないやんけアホンダラア!!!!って書いてますね。

エラーの解消

条件式の内容を見直しました。
ordersテーブルのitem_idとitemテーブルのidが等しいか等しくないかとか
ネチネチ細かく記述しないで
もうordersテーブルがあるかないかで条件式を組みました。

<% unless @item.order == nil %>
        <div class="sold-out">
          <span>Sold Out!!</span>
        </div>
      <% end %>

大胆にいけば売却されてないページもうまくいきました。