こんにちは!
最終課題でメルカリみたいな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 %>
大胆にいけば売却されてないページもうまくいきました。