Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21093

whereメソッドと正規表現で別テーブルの存在確認

$
0
0

概要

模擬フリマアプリ作成時、
別テーブルに該当のIDをもつレコードが存在するか確認し、存在すればテキストを表示させるところでかなり詰まったので備忘録としてまとめます。

具体的には商品(Product)がPay.jpを通して決済がおきた時に、取り引き(Transaction)テーブルにproduct_idが保存される形となっています。

トップページでは商品をancestryを使ってカテゴリー別に一覧表示させており、商品が既に取り引き済だった場合に、「SOLD OUT」の文字を表示させます。

完成イメージ

Image from Gyazo

各テーブル

classCreateProducts<ActiveRecord::Migration[5.2]defchangecreate_table:productsdo|t|t.string:name,null: falset.integer:price,null: falset.references:user,null: false,foreign_key: truet.timestampsendendend
classCreateTransactions<ActiveRecord::Migration[5.2]defchangecreate_table:transactionsdo|t|t.references:product,null: false,foreign_key: truet.references:user,null: false,foreign_key: truet.timestampsendendend

コントローラー

classProductsController<ApplicationControllerdefindex# カテゴリー別 一覧表示# アンセストリーのID毎に10件ずつ商品を取得@ladies_products=Product.where(category_id: 20..85).limit(10)@mens_products=Product.where(category_id: 91..144).limit(10)@appliances_products=Product.where(category_id: 408..434).limit(10)# カテゴリー別 Sold Out Check# idsと複数形になるところを気付くのにも時間がかかりました@ladies_transaction=Transaction.where(product_id: @ladies_products.ids)@mens_transaction=Transaction.where(product_id: @mens_products.ids)@appliances_transaction=Transaction.where(product_id: @appliances_products.ids)endend

ビュー

.top__genre-items-@ladies_products.eachdo|product|.top__genre-item=link_toproduct_path(product.id),class:"top__genre-item-link"do.top__genre-item-pict=image_tagproduct.images.first.image.url,alt:"商品画像",class: "top__genre-item-img".top__genre-body.top__genre-body-price.top__genre-body-price--yen¥.top__genre-body-price--value=product.price.top__genre-body-name=product.name-# Sold Out Check-# @*****_transactionに値が入っているか確認-if@ladies_transaction.present?-# @*****_transactionの配列に入っている一番最初の要素のproduct_idとeachで表示させているProductのIDが適合すればSOLD OUTを表示-if@ladies_transaction.first.product_id==product.id.top__transaction-check.top__transaction-check--btnSOLDOUT

firstが肝でしたね・・・!
精進します・・・!

以上となります

もっといい方法があればご教示くださいm(__)m


Viewing all articles
Browse latest Browse all 21093

Trending Articles