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