ActiveRecordを使い、key=>valueのHashを作成していた。
- コメントで指摘いただいた箇所について修正しました。
指摘箇所である.map { |x| x }
ですが、Mysql2::Result
に対しては直接.flatten
が使えないため.to_a
の代わりとして呼び出していました。
@users = Hash.send :[], *ActiveRecord::Base.connection.execute('SELECT `id`, `name` FROM `users`').to_a.flatten
@users[1]
# => "ユーザー1"
Hash[*Array] をしているため、.execute
で取得してくるレコード数が一定を超すとスタックオーバーフローとなる。
records.size
=> 10000
Hash.send :[], *records.flatten
SystemStackError: stack level too deep
ActiveRecordの使い方やHashの作り方の両方に問題があるため修正
@users = User.pluck(:id, :name).to_h
@users[1]
# => "ユーザー1"
.pluck
で必要なカラムを取得し .to_h
でHash化することで解決しました。