LoginSignup
7
4

More than 5 years have passed since last update.

Ruby・Railsを使って開発しているときに使ったメソッドをいくつかまとめてみた

Last updated at Posted at 2017-04-28

はじめに

自分が本格的にチーム開発にjoinしてから今まで使ってきたメソッドについて自分へのメモ的な感じでまとめてみました。随時編集、追記致します。

pluck

こちらは僕自身一番お世話になった気がします。DBから欲しいデータのidを取り出すためによく使いました。

example.rb
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

これは条件分岐の際に使いました!例えば運営側で選択したタグの製品を表示したいときに、一つしか選ばれていなくてもちゃんと配列になるようにしたいときに使いました。

example.rb
tags = tag.is_a?(Array) ? tag : [tag]

try

こちらは自分が書いたメソッドが万が一が空だった際にnilが返ってくるようにするために使いました。

example.rb
Product.where(status: 2).
  pluck(:id).
  try(:id)
# 中身が空だった場合nilが返ってくる
=> nil

僕はよくこんな感じで書いてました、、

example.rb
Product.pluck(:id).where(status: 6).try(:first)

index_by

こちらもリファクタリングしている際によくindex_byを使えば記述量減るねみたいな指摘を受けました。。指定したカラム名をkeyに、オブジェクトをvalueとして扱いたい時はこのメソッドを使います。

example.rb
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!(選択範囲)と書いた場合は元の配列の要素も削除されます。

example.rb
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

これは計算系の処理を書くために使いました。引数に初期値を与えないと、先頭にある一つ目の要素が初期値となります。

example.rb
array.inject(0.0) { |sum, score| sum + score.average_score } / array.size
#=> 4.7
7
4
4

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
7
4