0
0

業務でmappluckの違いを意識することが増えたので、整理する


map pluck
公式doc https://docs.ruby-lang.org/ja/latest/class/Array.html#I_COLLECT https://railsdoc.com/page/model_pluck
RubyのArrayクラスのメソッド RailsのActiveRecordのメソッド
各要素に対してブロックを評価した結果を全て含む配列を返す 指定したカラムのレコードの配列を返す
特定のカラムの配列を取得したいときの記法 Array.map(&:カラム名) モデル.pluck(:カラム名)
ActiveRecordインスタンスの生成 する(必要なカラム以外の全てのカラムをloadする) しない(必要なカラムのみを取得する)
使い分け インスタンスからカラムの配列を取得したいとき インスタンス以外から直接カラムの配列を取得したいとき
詳細説明 取り出したいカラム以外の情報も取得するためメモリ使用量は増えてしまう。既にインスタンス化されたものにmapを使用することで余計なクエリ発行を防ぐことができる。 メモリ使用量が少なく大量のデータを扱う場合にパフォーマンスが高い。ただメソッド実行時に毎回SQL分が発行されるので、N+1の原因になるケースがあるので注意
User.all.map(&:id)
 # => User Load  SELECT `users`.`id`, `users`.`name`, (省略) FROM `users`

User.all.pluck(:id)
 # => User Pluck  SELECT `users`.`id` FROM `users`


# インスタンスに対してmapを使用する例
users = User.all
 # => User Load  SELECT `users`.`id`, `users`.`name`, (省略) FROM `users`
users.map(&:id)
 # => [1,2,3,4,...,100]

[参考]

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