0
0

More than 3 years have passed since last update.

Ruby小ネタ2

Last updated at Posted at 2019-11-21

現場のプロジェクトでよく使い、でも初心者な自分は知らなかったあれこれ。

pluck

指定したカラムの値を配列として戻します。

HogeModel.pluck(:id)
# => [1,2,3]

なにが便利かというと、配列になっているのでinclude?とかany?が使えます。
処理中に出てきた変数と比べられたり、where句の問い合わせにそのまま入れられたり(配列になっているので、Railsはin句として処理してくれる)。

子モデルの値に対するwhere句

親モデルに対するwhere句はwhere(colum: 'a')で書けますが、それでは子モデルは?

AModel.joins(:BModel).where(b_models: {bcolum: 'b'})
# => SELECT a_models.* FROM a_models INNER JOIN b_models ON a_models.id = b_models.a_id WHERE b_models.bcolum = 'b'

意外に初心者向けの本にはこれが書いてなかったりする。
ちなみにjoinした方が親テーブルであっても、複数形のsを付けないとエラーになる。
どうやらSQLとして発行する時にテーブル名として表現するためのようです。

&.

最初に見た時はなんだこれ? と思ったのですが、分かると非常に便利。

hoge = 'aB'
hoge&.swapcase
# => "Ab"

huga = nil
nil&.swapcase
# => nil

&.を付けることで、nilならばエラーを出すswapcaseがエラーを出さずに実行できます。
使った場面としては、外部結合して取ってきた子モデルの特定のカラムを取得するとき。

a_table.b_table&.bcolum

こんな風にしておけば、b_tableが空の時でもエラーにならずに実行が続きます。

0
0
0

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