Я сейчас обновляю приложение до Rails 3. Я решил пойти с gem 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 и запускаю там запрос, результаты будут 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
Что является уродливым как грех.
Кто-нибудь, как я могу заставить его вернуть хеш вместо массива?