LoginSignup
2
1

More than 1 year has passed since last update.

条件分岐の記述について【その1】

Last updated at Posted at 2022-01-01

複数の条件を分岐させる記述

条件1
ログインユーザーか未ログインユーザーか?

条件2
商品出品者とユーザーが一致するのか?

条件3
商品が有れば購入ボタンが有る、商品が無ければ購入ボタンが無い

hello.cpp
<% if user_signed_in? %> //←ログインしているかを判定
  <%if current_user.id == @item.user_id %> //←商品出品者とユーザーが一致するかを判定
    <%= 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" %>
  <% elsif @item.purchase_management.blank? %> //←商品モデルの中の購入履歴が空かを判定
    <%= link_to "購入画面に進む", item_orders_path(@item.id) ,class:"item-red-btn"%>
  <% end %>
<% end %>

学んだポイント

条件文もアソシエーションとの関係を前提に記述する
今回苦労した実装は【条件3】を正常に挙動させることでした。
この記述の辿り着くまでに @order.purchase_management_id = nil や他の記述で試すもエラーが起こり、悪戦苦闘しておりました。アソシエーションとの関連を無視してどのような条件で記述すればいいのかを気づけていなかったのが、時間がかかった要因かと思います。

【item】 has_one 【purchase_management】
このアソシエーションを前提に記述することを気づけていれば、、、

つまり、itemがpurchase_managementを持っているかどうか?
purchase_managementは購入履歴のモデルです。

itemがpurchase_managementを持っていれば、売り切れ。
itemがpurchase_managementを持っていなければ在庫あり。
ということになります。

あとは、その真偽をどのように判定するか、、、

今回は【blank?】を用いました。
blank?メソッドは、オブジェクトが空白の場合はtrueを返し、オブジェクトが空白ではない場合はfalseを返すメソッドです。

この反対のメソッドは【present?】メソッドです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1