¿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?