gpt4 book ai didi

ruby-on-rails-3 - 为什么带有 Mysql2 Gem ActiveRecord::Base.connection.execute(sql) 的 Rails 3 返回数组而不是哈希?

转载 作者:行者123 更新时间:2023-12-03 08:20:47 25 4
gpt4 key购买 nike

我正在将应用程序升级到 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

这是罪恶的丑陋。

有没有人如何让它返回哈希而不是数组?

最佳答案

如果您只想重复使用 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

关于ruby-on-rails-3 - 为什么带有 Mysql2 Gem ActiveRecord::Base.connection.execute(sql) 的 Rails 3 返回数组而不是哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5760100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com