【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はこちらから。