不完全是您正在寻找的,但也许:
connection.execute('select * from users').all_hashes
你会回来的
[{:id => 1, :name => 'Bob', :email => '[email protected] /cdn-cgi/l/email-protection'},{:id => 1, :name => 'Joe', :email => '[email protected] /cdn-cgi/l/email-protection'}]
你可以这样做:
results = connection.execute('select * from users').all_hashes
munged_results = []
columns = results.first.keys.map(&:to_s)
munged_results << results.first.keys.map(&:to_s)
munged_results += results.map{|r| columns.map{|c| r[c]} }
类似的东西
edit:
results = connection.execute('select * from users').all_hashes
munged_results = []
columns = User.column_names
munged_results << columns
munged_results += results.map{|r| columns.map{|c| r[c]} }
应该正确订购。
除此之外,还有从 #execute 返回的结果对象,可以询问它以获取一些信息。像 #fetch_fields 这样的方法会按顺序获取字段,而 #fetch_row 会以数组的形式获取结果集的每一行(就像迭代器一样)。
再次编辑:
好的,这是一个很好的解决方案,针对您使用的任何数据库进行修改:
class Mysql::Result
def all_arrays
results = []
results << fetch_fields.map{|f| f.name}
while r = fetch_row
results << r
end
results
end
end
这将使他们无需承担大量开销。
像这样使用它:
connection.execute('select salt, id from users').all_arrays