【ruby】rubyでよく使うメソッドまとめ その1

勉強する中でわからなくてググったメソッドをガンガンまとめておく。

find_or_initialize_byメソッド

activeレコードの中を見てみる。

def find_or_initialize_by(attributes, &block)
  find_by(attributes) || new(attributes, &block)
end

attributesがあればfind_by(attributes)でインスタンスを、なければnewして新しいインスタンスを作ってattributesを渡してあげる。 例えばこんな感じ

@user = User.find_or_initialize_by(id: 1)

selectメソッド

{}の中がtrueになるように返す。よく使うのは{|k|}と{|k,v|}

numbers = [1, 2, 3, 4, 5]
numbers.select{|k| k % 2 == 0}
# [2, 4]

animals = [a: "dog", b: "cat", c: "hippo"}
animals.select{|k, v| v == "hippo"}
# {:c=>"hippo"}

to_symメソッド

symbolを返す。

str = "gorilla"
str.to_sym
# :gorilla

in?メソッド

指定したattributesの中に評価対象が入っているかをチェックする。 selectとto_symも使って書いてみる。

class Item
  ATTRIBUTES = [:name, :age]
end

coco = {name: "coco", age: 7}
maru = {name: "maru", age: 2, sex: "male"}
coco.select{|k, _| k.to_sym.in?(Item::ATTRIBUTES)}
# {name: "coco", age: 7}
maru.select{|k, _| k.to_sym.in?(Item::ATTRIBUTES)}
# {name: "maru", age: 2}

それぞれの変数のkeyに対してto_symでシンボル化し、ItemクラスのATTRIBUTESに一致するものだけをselectで返している。 そのため変数maruでは性別が入っているが、返されたハッシュからは消えている。

castメソッド(キャスト)

指定した方に変換するメソッド。 上の例にさらに追加してみる。

class Item
  ATTRIBUTES = [:name, :age, :is_male]
end

coco = {name: "coco", age: 7, is_male: "false"}  # この時点ではfalseはstring
coco.select{|k, _| k.to_sym.in?(Item::ATTRIBUTES)}
# {name: "coco", age: 7,  is_male: "false"}
boolean_items = %w(is_male)
boolean_items.each do |attr|
  coco[attr] = ActiveRecord::Type::Boolean.new.cast(coco[att])
  # boolean_itemに対してキャストを行いboolean型に変換している
end
# {name: "coco", age: 7, is_male: false}

今日はここまで。

その2はこちらから。

yasagori-programing.hatenablog.jp