Я нахожусь в процессе обновления приложения до Rails 3. Я решил использовать гем mysql2.В приложении есть какой-то устаревший код, который выполняет вызовы, например:
results = ActiveRecord::Base.connection.execute(sql)
В версии 2.3.x он использовал
results.each_hash do |row|
...
Но в случае с gem mysql2 результаты имеют тип Mysql2::Result
, который имеет только метод each
.Проверенные документы и они указывают результаты должны быть хеш-ключом на имя поля.Отлично!
Но на самом деле это Array
, а не Hash
.
Когда я использую консоль rails и создаю свой собственный Mysql2::Client
и запускаю запрос там,результаты равны a Hash
, что мне и нужно.
В приложении rails я думаю, что лучше использовать ActiveRecord::Base.connection
, так как оно было создано с опциями из базы данных.YML.
Обратите внимание, к сожалению, результат не сопоставляется с моделью, поэтому я не могу его использовать.
То, что я сейчас сделал, например:
result = ActiveRecord::Base.connection.execute(sql)
field_index = result.fields.index("field")
result.each do |row|
row[field_index]
end
Что безобразно, как грех.
Кто-нибудь знает, как заставить его вернуть хэш вместо массива?