#はじめに
今回実装する上で詰まった商品表示機能についてまとめる。
#実装機能
・画像・商品.商品名の3つの表示。
・商品は投稿日が早いもの順に表示。
・売却済みの商品にはsold outを表示。
##画像・商品.商品名の3つの表示
<%= @item.price %>円<br><%= @item.shipping_method.name %>
今回商品を出品する際に配送方法、商品の状態、都道府県などはActive Hashを用いた。
####注意したい点
Active Hashを用いているため上記のnameのところをカラムと同じidとするとidが表示される。
##商品は投稿日が早いもの順に表示
コントローラーのindexアクションでorderメソッドを用いる。
####orederメソッド
テーブルから取得してきたレコード情報を持つインスタンスの並びを変更してくれるメソッド。
並び順にはASC(昇順)とDESC(降順)の2種類がある。
@users = User.all.order(カラム名: :並び順)
今回の場合、保存された時間が早いものから表示させたい。
なので、下記のように保存された時間を保存する**(created_at)カラムを用いた。
並び順は新しい物から古い物(降順)**なのでdescを用いた。
@items = Item.all.order(created_at: :desc)
##売却済みの商品にはsold outを表示
この機能を実装する上で使用したメソッド
・if文を用いて商品が売り切れた場合、sold outを表示したい。
ではどのようにすれば商品が売り切れた時、売り切れていない商品を区別できるのか? 答えは、presentメソッドを使うことで解決できる。
####presentメソッド
オブジェクトであるレシーバーの値が存在すればtrue,存在しなければfalseを返してくれるメソッドである。
if文などの条件分岐を用いる際に使われる事が多い。
変数名.present?
上記の様に記述する事で使用。
?を一緒につける。
このメソッドを使い今回売却済みの商品にsold outを表示していくと下記のようになる。
<% if item.purchase.present? %>
<div class='sold-out'>
<span>Sold Out</span>
</div>
<% end %>
・itemは商品の情報が入ったテーブルの変数名
・purchaseは購入した商品の情報が入ったテーブルの変数名
この2つは予めアソシエーションを組んでおく必要がある。