📘

ActiveSupport で配列の要素をキーとした Hash に変換する Enumerable#index_with

に公開

attributes.to_h { [_1, ""] } みたいなコードを書いてたら #index_with を使え!と Rubocp に怒られたので覚書。
ActiveSupport の Enumerable#index_with は『レシーバの要素をキーとしてブロックの戻り値を要素』として Hash に変換するためのメソッドです。

require "active_support/all"

data = { id: 1, name: "homu", age: 14 }

# レシーバがキーとなり、そのキーを引数としてブロックを呼び出す
# ブロックの戻り値がそのキーの要素となる
pp %w(id name age).index_with { data[_1] }
# => {"id" => nil, "name" => nil, "age" => nil}

これを踏まえると最初に怒られた attributes.to_h { [_1, ""] }attributes.index_with { "" } と記述できます。
知ってれば #index_with のほうがわかりやすい気もするんですが #index_with という言葉から Hash を返すイメージが全然できないので個人的には #to_h のほうが普通にわかりやすい気がしますねえ。
Rubocop で指摘されるほどでもない気がする。

GitHubで編集を提案

Discussion