¿Por qué Rails 3 con Mysql2 Gem ActiveRecord :: Base.connection.execute (sql) devuelve Array no Hash?

Estoy en el proceso de actualizar una aplicación a Rails 3. He decidido usar la gema mysql2. Hay algún código heredado en la aplicación que hace llamadas como:

results = ActiveRecord::Base.connection.execute(sql)

En la versión 2.3.x, utilizaba

results.each_hash do |row|
...

Pero con gem mysql2, los resultados son tipoMysql2::Result, que solo tiene unaeach método. Comprueba los documentos y especifican que los resultados deben ser un hash tecleado en el nombre del campo. ¡Excelente

Pero de hecho, es unaArray, No unHash.

Cuando uso la consola de rails e instancia mi propiaMysql2::Client y ejecuta la consulta allí, los resultadosso a Hash, que es lo que quiero.

En la aplicación de rieles, creo que es mejor usarActiveRecord::Base.connection, ya que se ha instanciado con opciones de database.yml.

Nota, desafortunadamente el resultado no se asigna a un modelo, por lo que no puedo usar eso.

Lo que he hecho por ahora es, por ejemplo:

result = ActiveRecord::Base.connection.execute(sql)
field_index = result.fields.index("field")
result.each do |row|
  row[field_index]
end

Lo que es feo como el pecado.

¿Alguien cómo puedo hacer que devuelva un Hash en lugar de una matriz?

Respuestas a la pregunta(5)

Su respuesta a la pregunta