カテゴリー:
Rails
タグ:
 Rails pluck ids

このエントリーをはてなブックマークに追加
更新日時:
2013年10月03日(木)
作成日時:
2013年10月03日(木)

前の記事 / 次の記事

あるモデルのname列だけ欲しい場合、

Items.pluck :name
# 例えば ["Mushroom", "Flower", "Star",]

とするとnameだけの配列を取得することができる。
また、id列だけ欲しい場合は、

Items.ids
# 例えば [1, 2, 3]

とも書ける。

このメソッドの何が一番嬉しいのかというとオブジェクトが生成されないこと。
例えば次のようにした場合、

Items.all.map { |item| item.name }

でも得られる配列は同じだけど、
この場合繰り返しの回数だけ Item.new が走ってオブジェクトが生成される。

オブジェクトが生成されないということはそれだけでも充分高速だけど、

オブジェクト生成時のコールバックメソッドも走らないということなので、
例えば力技で after_initialize や after_find 等に重い処理を仕込んでいたとしても
華麗にスルーさせることができる。

今現在、オブジェクトを生成してもしなくてもほとんど速度に差がなくても、
将来誰か(もしくは過去を忘却した自分)がコールバックに重い処理を仕込んで
しまわないとも限らないので、積極的に使っていきたい。

確か古いRailsでは使えなかったはずだけど、
ぐぐってみたところ3.2.1以降から使えるっぽい。