Railsでrubyの基本メソッドを使う

TECH::CAMPで勉強し始めて19週目。

チーム開発にもようやく慣れてきました。

チーム開発を始めた頃はコンフリクトが起きては大騒ぎでしたが、今は落ち着いて対応できるようになりました。

こんな実戦練習ができるのも学校の環境に感謝です。

 

今はメルカリのクローンサイトを作っていて、商品詳細情報をデータベースから引っ張ってこれる機能を実装しています。

 

そこで、コントローラーやビューに色々と基本のメソッドを使用しましたので

使い方を備忘録として書き留めておこうと思います。

 

・開発にはRails5.2.3を使用しています。

・初期データは、カテゴリ機能実装時に覚えたseed.rbを使ってデータベースに登録します。

・ビューはhamlを使用しています。

・コントローラーは、ビューで使う物ためにインスタンス変数に格納するのがほとんどなので、

・今回の記事も変数に格納する形で記載しています。

 

 

 

条件に合う物をn個返す

・データベースの古い物から4つを表示する

@items = Item.first(4)

 

・データベースの新しいものから4つだと、こう

@items = Item.last(4)

 

 

条件に合う物を全て返す

・「brand」カラムに"ABC"が入っている物を全部返す

@brandItems = Item.where(brand: "ABC")

 

 

商品詳細ページにて、現在表示しているアイテムと同じカテゴリのものをランダムに3つ返す(但し現在表示しているアイテムは除く)

@relatedItems =
Item.where(category_id: @item.category_id)
.where.not(id: params[:id]).order("RAND()").limit(3)

 

ちょっと冗長ですね・・もっといい書き方があるかも?

 

アソシエーションを組んでいるテーブルに紐づいているデータ(配列)のうち、最初のデータだけを表示する。

今回のアプリは1つの商品(itemsテーブル)が複数の画像(imagesテーブル)を持っています。

そのうち、商品詳細ページに大きく表示するのは、1枚目の写真だけという設定です。

= image_tag @item.images.first.image_url,class: "item-image-box__main--image"

f:id:atsukofu:20200713223551p:plain

こんな感じです。

 

 

ビューでテンプレートリテラルを使う

これは意外と使ったことがなかった。(というかRailxになった途端にテンプレートリテラルの存在を忘れていた。)

= #{@item.price}"

 

 

ビューでcase文を使う

条件分岐が多くelseだらけになりそうなので、久しぶりにcase文を使いました。

案外見易くて好きかもしれません。

-case @item.postage_type
- when 1
= "未定"
- when 2
= "らくらくFURIMA便"
- when 3
= "ゆうゆうFURIMA便"
- when 4
= "ゆうメール"
- when 5
- when 6
= "普通郵便(定型、定形外)"
- when 7
- when 8
- when 9
= "クリックポスト"
- when 10

 

 

 

前の商品/後ろの商品にページ遷移する

前の商品に移動(前の商品がない場合はリンクは表示されない

 
- if @item.id != @items.first.id
= link_to item_path(@item.id - 1), class:"item-links__btn" do
前の商品

コントローラーはこう

@items = Item.all
 

後の商品に移動の場合は、こうです。

- if @item.id != @items.last.id
= link_to item_path(@item.id + 1), class:"item-links__btn" do
後ろの商品

 

 

まとめ

今回は、Rubyの学習初期に学んだメソッドを思い出しながら実装しました。

学習初期に、「配列の一番前の値を持ってくることになんの意味が・・?!」と思いながら勉強していたことが、

やっと報われた気がします。

あの頃に諦めずにここまでできるようになれて本当によかった。

 

学習初期の方は、メソッドだけを学んで面白くないと思われる方もいるのではないでしょうか。

先にアプリをある程度作れるようになって、必要になった際に改めて基本を勉強するのも一つの手かもしれませんね。

そのほうが、基本の価値がわかるから身につく気がします。