はじめに
自分が本格的にチーム開発にjoinしてから今まで使ってきたメソッドについて自分へのメモ的な感じでまとめてみました。随時編集、追記致します。
pluck
こちらは僕自身一番お世話になった気がします。DBから欲しいデータのidを取り出すためによく使いました。
sorted_ids = Product.
where(id: ids).
where('shipping BETWEEN ? AND ?', Time.now, Time.now + 1.month).
order(:shipping).
pluck(:id)
# =>[4, 57, 87, 5, 46, 35]
おすすめ参考リンク先→https://techacademy.jp/magazine/7692
is_a
これは条件分岐の際に使いました!例えば運営側で選択したタグの製品を表示したいときに、一つしか選ばれていなくてもちゃんと配列になるようにしたいときに使いました。
tags = tag.is_a?(Array) ? tag : [tag]
try
こちらは自分が書いたメソッドが万が一が空だった際にnilが返ってくるようにするために使いました。
Product.where(status: 2).
pluck(:id).
try(:id)
# 中身が空だった場合nilが返ってくる
=> nil
僕はよくこんな感じで書いてました、、
Product.pluck(:id).where(status: 6).try(:first)
index_by
こちらもリファクタリングしている際によくindex_byを使えば記述量減るねみたいな指摘を受けました。。指定したカラム名をkeyに、オブジェクトをvalueとして扱いたい時はこのメソッドを使います。
Travel.where(id: ids).index_by(&:name)
#=> {"流しそうめん体験"=>
#<Travel id: 1, name: "流しそうめん体験", ・・・>,
"芋掘り体験"=>
#<Travel id: 3, name: "芋掘り体験",・・・>
}
おすすめ参考リンク先→http://qiita.com/QUANON/items/c3582a55949d1e6a1e84
slice,slice!
これは配列から指定した要素を削除できるというものです。slice(選択範囲)だと戻り値は削除されたものが返ってきますが、元の配列は削除されていないです。slice!(選択範囲)と書いた場合は元の配列の要素も削除されます。
date = [1, 2, 3, 4, 5, 6, 7]
date.slice!(0, 6)
print date
#=> [2, 3, 4, 5, 6]
date = [1, 2, 3, 4, 5, 6, 7]
date.slice!(1..5)
print date
#=> [1, 7]
uniq,uniq!
これは配列から重複している要素を取り除けるというものです。uniqだと戻り値は取り除かれたものが返ってくるが元の配列は変わらないです。uniq!と書いた場合は元の配列自身が重複した要素を取り除かれます。
ids = [1, 37, 4, 65, 4, 21, 21, 78, 13, 37, 56]
travel_ids = ids.uniq!
p travel_ids
#=> [1, 37, 4, 65, 21, 78, 13, 56]
inject
これは計算系の処理を書くために使いました。引数に初期値を与えないと、先頭にある一つ目の要素が初期値となります。
array.inject(0.0) { |sum, score| sum + score.average_score } / array.size
#=> 4.7