ruby-on-rails-3 – 为什么Rails 3与Mysql2 Gem ActiveRecord :: Base.connection.execute(sql)返回Array不是哈希?

我正在将应用程序升级到Rails 3.我已经决定使用 mysql2 gem.应用程序中有一些旧版代码可以进行如下调用:
results = ActiveRecord::Base.connection.execute(sql)

在2.3.x版本中,它使用

results.each_hash do |row|
...

但是使用gem mysql2,结果是类型Mysql2 :: Result,它只有一个方法.检查文档,他们指定结果应该是字段名称上的哈希键.大!

但实际上它是一个Array,而不是一个哈希.

当我使用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

这是丑陋的罪恶.

有没有人我可以得到它来返回哈希而不是数组?

解决方法

如果只想重新使用database.yml配置,可以这样做:
config = ActiveRecord::Base.configurations[RAILS_ENV].symbolize_keys
conn = Mysql2::Client.new(config)
conn.query("select * from users").each do |user|
  # user should be a hash
end

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...