TECH EXPERT 62日目

TECH::EXPERT

転職エージェントさんを使っているのだが、昨日の昼頃に明日の面接の予定を入れおった。
昨日の昼前に見知らぬ電話番号から着信があって私は出なかったんだけど、今思えばあれがエージェントさんの携帯番号だったのか。
気付くのが遅れて今日気付いたので、実質的には翌日の面接ですね。

渋谷の家にはスーツを含め、ジャケット等の堅めの服装は何もないのでSHIPSで上から下まで揃えました。TECHの教室があるフレーム神南坂の近くは服屋さんが多いので、出向いたついでに買えるから助かった。

ruby

.slice

指定したindex位置から文字数分の文字列を抜粋する。
lengthを省略すると1文字抜粋。
非破壊的。

.slice(index, length)

[]と同じ。

slice!

.sliceと異なり、index1から文字数分の文字列を削除する。
lengthを省略すると1文字削除。
破壊的メソッド。

.slice!(index, length)

model scope

クラスメソッドとして定義することもできる。
クラスメソッドとの大きな違いは、where(id: nil)という処理を投げた場合にもscopeの場合はallを返すのでメソッドチェインが繋げられる。
クラスメソッドでやった場合にはnilが返るのでそこでチェインが切れることになる。

railsの推奨としてはクラスメソッドであるが、チェインできるようなメソッドに限ってscopeに切り出す方が見分けやすい。

  scope :price, -> (min, max) { 
    if min=="" && max==""
      all
    elsif  min==""
      where('price < ?', max.to_i) 
    elsif max==""
      where('price > ?', min.to_i) 
    else
      where('price between ? and ?', min.to_i, max.to_i)
    end}
  scope :search, -> (keyword){ where((["name LIKE ?"] * keyword.size).join(" AND "), *keyword.map{|w| "%#{w}%"}) }

複数キーワードでの検索

@keyword = params[:keyword].to_s.split(/[[:blank:]]+/)
文字列を全角・半角対応でスペース区切で配列へ変換

scope :search, -> (keyword){ where((["name LIKE ?"] * keyword.size).join(" AND "), *keyword.map{|w| "%#{w}%"}) }

scopeで配列数だけname LIKEを繰り返し、配列展開で列挙している。

pluck

摘むという意味。
インスタンスは取得せず、指定したカラムを配列で取得する。
メモリ効率が良い。ただし、実行の度にSQLが発行される。

Product.pluck(:name)

where

ハッシュも渡すことができる。

where (ActiveRecord::QueryMethods) - APIdock

active hash

アソシエーション

連携するカラム名はアクティブハッシュ名_idが要求されるので、保存するテーブルにはきちんと_idというrails流の外部キー名称を設定しなければならない。

コメント