表題ですべてを語るシリーズです。
検証した環境
$ bin/rails -v Rails 7.1.2
index_byとは
Railsガイドの説明が簡潔なので引用する。
index_byメソッドは、何らかのキーによってインデックス化されたenumerableの要素を持つハッシュを生成します。 - Active Support コア拡張機能 - Railsガイド- 9.1 index_by
今回の事例
レコードのidをKeyにして、Valueに実態のModelのレコードが入っているHashを用意したい場合。今回はBookモデルのすべての値を対象とする。
index_byを使わない場合
以下のような書き方になる
result_hash = Book.all.each_with_object({}) do |object, hash| hash[object.id] = object end
index_byを使う場合
以下のように書ける
result_hash = Book.all.index_by(&:id)