我正在将应用程序升级到 Rails 3。我决定使用 mysql2 gem。应用程序中有一些遗留代码可以进行如下调用:
results = ActiveRecord::Base.connection.execute(sql)
在 2.3.x 版本中,它使用
results.each_hash do |row|
...
但是对于 gem mysql2, results 是 type Mysql2::Result
,它只有一个each
方法。检查了文档,他们指定结果应该是字段名称上的哈希键。伟大的!
但实际上,它是一个Array
,而不是一个Hash
。
当我使用 rails 控制台并实例化自己的控制台并Mysql2::Client
在那里运行查询时,结果是a 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
这是丑陋的罪恶。
有谁可以让它返回一个哈希而不是数组?