find_eachメソッド

find_eachメソッド

勉強をしていく中で、下記のようなコードで戸惑ってしまった事があったので、こちらに備忘録として記載します。

User.find_each(&:id)

[find_each]メソッドとは?
大量のレコードをループ処理する際にメモリの消費量を抑える為に、デフォルトでレコードを1000件毎に区切ってループ処理するメソッド
モデルのクラスに対して呼び出すことが出来るメソッド
1000件毎にレコードを取得しループ処理する際に、主キーを昇順でソートする

(&:id)とは?
(&)でメソッドをブロック展開するのを省略する書き方
(:id)と記載することで、ブロックで取り出した要素を[.id]メソッドで実行するという事

つまり以下と同じになる

User.find_each do |x|
  x.id
end

参考記事:

Railsでよく見る arr.map(&:id) の意味 - Qiita

find_each | Railsドキュメント

【Rails】 find_eachメソッドでメモリを節約して大量データを扱う方法 | Pikawaka

【Ruby】array.map(&:method)を理解する - Qiita