【发布时间】:2011-08-11 05:35:18
【问题描述】:
我正在将应用程序升级到 Rails 3。我决定使用 mysql2 gem。应用程序中有一些遗留代码可以进行如下调用:
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,因为它是使用database.yml 中的选项实例化的。
注意,很遗憾,结果没有映射到模型,所以我不能使用它。
我现在所做的是,例如:
result = ActiveRecord::Base.connection.execute(sql)
field_index = result.fields.index("field")
result.each do |row|
row[field_index]
end
这是丑陋的罪恶。
有没有人可以让它返回一个哈希而不是数组?
【问题讨论】:
标签: ruby-on-rails-3 gem mysql2