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