##はじめに##
ひたすらfurimaアプリを作成中です。
今回は複数の条件分岐が重なり、自分でも訳が分からなくなったのでまとめたいと思います。
##やりたいこと##
-
ログイン状態の出品者でも、売却済みの商品に対しては「編集・削除ボタン」が表示されないこと
-
ログイン状態の出品者以外のユーザーでも、売却済みの商品に対しては「購入画面に進む」ボタンが表示されないこと
①.ログイン中のユーザーと商品を出品したユーザーが一緒の場合かつ、商品が売り切れではない場合は編集ボタン・削除ボタンが出現する。
②.ログイン中のユーザーかつ、出品者以外のユーザーで商品が売り切れではない場合は購入ボタンが表示される。
##最初に作成した記述##
<% if user_signed_in? %> #ログインしているユーザー限定
<% if current_user == @item.user%> #出品者とログイン中のユーザーが一緒の場合
<% unless @item.purchase_history.present? %> #商品が売り切れてない場合
<%= link_to "商品の編集", edit_item_path(@item.id) , method: :get, class: "item-red-btn" %>
<p class="or-text">or</p>
<%= link_to "削除", item_path(@item.id), method: :delete, class:"item-destroy" %>
<% end %>
<% else %>
<%= link_to "購入画面に進む", item_purchase_histories_path(@item.id), class:"item-red-btn"%>
end
すんごい重複してしまいました。
もっと簡潔に記述するには。。。
同じを条件をまとめてみる。
ログイン中が絶対条件だから大枠は if user_signed_in?
ログインしているユーザかつ出品者、そして商品がある場合のときだけ編集・削除ページ出現
<% if user_signed_in? && @item.purchase_history == nil %>
商品履歴は空っぽですよという意味。
<% if user_signed_in? && @item.purchase_history == nil %>
<% if current_user == @item.user%>
<%= link_to "商品の編集", edit_item_path(@item.id) , method: :get, class: "item-red-btn" %>
<p class="or-text">or</p>
<%= link_to "削除", item_path(@item.id), method: :delete, class:"item-destroy" %>
<% else %>
<%# 商品が売れていない場合はこちらを表示しましょう %>
<%= link_to "購入画面に進む", item_purchase_histories_path(@item.id), class:"item-red-btn"%>
<% end %>
<% end %>
紙などに書いて整理することが大事という事が分かりました。