【Rails】アソシエーションでつながった他のテーブルの情報を表示する

実は初めましての機能。
今回制作している最終課題のフリマアプリは、ユーザー情報以外に商品に関して説明や値段を登録する商品情報と、購入した際に送り先の住所等を登録する購入情報のテーブル、それら二つを紐づけるテーブルにそれぞれ分かれています。
今回は、ビューファイルでの情報の表示について、2点記録します。


商品登録のテーブルにある情報を別の所で表示させたい

f:id:programmingnuoh:20210329220049p:plain
商品名や値段が載っています

ビューファイル(購入情報)の記述は以下の通り。

    <div class='buy-item-info'>
      <%= image_tag @item.image, class: 'buy-item-img' %>
      <div class='buy-item-right-content'>
        <h2 class='buy-item-text'>
          <%= @item.name %>
        </h2>
        <div class='buy-item-price'>
          <p class='item-price-text'>¥<%= @item.price %></p>
          <p class='item-price-sub-text'><%= @item.shipping_fee_status.name %></p>
        </div>
      </div>
    </div>

@itemに商品情報が入っています。
その商品情報を指定するコントローラー(購入情報)は以下の通り。

  @item = Item.find(params[:item_id])

今回の肝だな〜と感じるのはparamsのIDの指定。いつも使っていたparams[:id]を指定してしまうと、記述している場所(今回なら購入情報)のIDを取得してしまいます。
アソシエーションで繋がっていれば、上記のようなIDの指定の仕方が可能です。


紐付きの有無で表示を変える

f:id:programmingnuoh:20210329221537p:plain
購入した商品にはSOLDOUTの表示がされる
ビューファイル(商品情報)の記述は以下の通り。

<% if @item.order_item.present? %> 
  <div class='sold-out'>
    <span>Sold Out!!</span>
  </div>
<% end %>

アソシエーションで繋がっていれば、変数の後にモデルの指定をすることで繋がりの有無が確認できます。
あとは空か否かを判断するメソッドで確認。
関係するメソッドはコチラを参考にさせていただきました。
今回は、紐づきがtrueのときにSOLDOUTが表示されるようpresent?メソッドを使用しました。


まとめ

今回はかなり自分本位のまとめになりました…。
完全に自分しかわかりませんね。
見てしまった方にはごめんなさい。
各モデルのアソシエーションがわからなくなってしまったとき等、実装がわからなくなったときにここの記事に戻ろうと思います。


今回、以下の記事を参考にいたしました。ありがとうございました。 ActiveRecord::RecordNotFound in 小説サイトを参考に真似をし練習中に起きたエラーです。
rubyの真偽判定メソッド(nil?/empty?/blank?/present?)を検証してみた結果、興味深いことがわかった