5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

商品の一覧を表示する機能

Last updated at Posted at 2020-12-22

#はじめに
 今回実装する上で詰まった商品表示機能についてまとめる。

#実装機能
・画像・商品.商品名の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つは予めアソシエーションを組んでおく必要がある。

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?