現場のプロジェクトでよく使い、でも初心者な自分は知らなかったあれこれ。
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が空の時でもエラーにならずに実行が続きます。