我正在将应用程序升级到Rails 3.我决定使用mysql2 gem.应用程序中有一些遗留代码可以调用:
results = ActiveRecord::Base.connection.execute(sql)
Run Code Online (Sandbox Code Playgroud)
在2.3.x版本中,它使用了
results.each_hash do |row|
...
Run Code Online (Sandbox Code Playgroud)
但是使用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
Run Code Online (Sandbox Code Playgroud)
哪个是罪恶的丑陋.
有没有人如何让它返回哈希而不是数组?