Почему Rails 3 с Mysql2 Gem ActiveRecord :: Base.connection.execute (sql) возвращает массив без хеширования?

Я в процессе обновления приложения до Rails 3. Я ' Я решил пойти с гемом mysql2. В приложении есть устаревший код, который выполняет такие вызовы, как:

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

В версии 2.3.x он использовал

results.each_hash do |row|
...

Но с gem mysql2 результатом является тип Mysql2 :: Result , который имеет только каждый метод. Проверил документы, и они указывают, что результаты должны быть хеш-ключом к имени поля. Отлично!

Но на самом деле это массив , а не хэш .

Когда я использую консоль rails и создаю свой собственный Mysql2 :: Client и запустите запрос там, результаты будут Hash , что мне и нужно.

В приложении rails, я думаю, лучше использовать ActiveRecord :: Base.connection , поскольку он был создан с параметрами из database.yml.

Примечание, к сожалению, результат не соответствует модели, поэтому я не могу его использовать.

На данный момент я сделал, например:

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

Что уродливо, как грех.

Кто-нибудь может, как я могу заставить его возвращать хэш вместо массива?

12
задан nickgrim 31 August 2011 в 10:42
поделиться