アプリケーションを Rails 3 にアップグレード中です。mysql2 gem を使用することにしました。アプリには、次のような呼び出しを行うレガシー コードがいくつかあります。
results = ActiveRecord::Base.connection.execute(sql)
2.3.x バージョンでは、
results.each_hash do |row|
...
しかし、gem mysql2 では、結果は typeであり、メソッドMysql2::Result
しかありません。each
ドキュメントを確認したところ、結果はフィールド名をキーにしたハッシュにする必要があると指定されています。すごい!
しかし、実際にはArray
ではなくHash
です。
Rails コンソールを使用して独自のインスタンスを作成Mysql2::Client
し、そこでクエリを実行すると、結果はにHash
なります。これは私が望むものです。
ActiveRecord::Base.connection
Rails アプリケーションでは、database.yml のオプションでインスタンス化されているため、を使用した方がよいと思います。
残念ながら、結果はモデルにマップされないため、使用できません。
私が今のところ行ったことは、たとえば次のとおりです。
result = ActiveRecord::Base.connection.execute(sql)
field_index = result.fields.index("field")
result.each do |row|
row[field_index]
end
それは罪のように醜いです。
配列の代わりにハッシュを返すようにするにはどうすればよいですか?