我正在升级一个应用程序到Rails 3。我决定使用mysql2 gem。在应用程序中有一些旧代码需要进行调用,例如:
results = ActiveRecord::Base.connection.execute(sql)
在2.3.x版本中,它被使用了
results.each_hash do |row|
...
但是使用 gem mysql2 后,结果的类型是 Mysql2::Result,只有一个 each 方法。查看文档,它们指定结果应该是以字段名为键的哈希表,很好!但实际上,它是一个数组而不是哈希表。
当我在 rails 控制台中实例化自己的 Mysql2::Client 并运行查询时,结果是一个哈希表,这正是我想要的。
在 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
这个东西丑得要命。
有人知道怎么让它返回一个哈希表而不是数组吗?