如何从执行sql结果中迭代列名

时间:2010-11-04 00:21:24

标签: ruby-on-rails loops

我正在尝试从结果中遍历每个列名称以放置在我视图的第一行。我正在使用execute sql方式来查询数据库。

到目前为止,我已经得到了这个,但它没有输出我需要的东西:

<% for columns in @results %>
  <tr>
    <% @results.each do |column, value| %>
      <td><%= column %></td>
    <% end %>
  </tr>
<% end %>

2 个答案:

答案 0 :(得分:3)

对于在问到这个问题2.5年后来到这里的人们,我能够使用Rails 3.2.13和Ruby 1.9.3-p194来做到这一点:

result=ActiveRecord::Base.connection.select_all("SELECT id AS 'user_id', first_name AS 'name' FROM users LIMIT 1")
result.each do |row|
  row.each do |k, v|
    puts "column #{k} contains #{v}"
  end
end

结果:

column user_id contains 1
column name contains Me
[{"user_id"=>1, "name"=>"Me"}]

访问它:

result.first["user_id"]

如果有3个结果,你想获得第二个结果:

result[1]["user_id"]

答案 1 :(得分:0)

查看:MySQL / Ruby(http://www.tmtm.org/en/mysql/ruby/),如果您正在迭代MySQL数据库。其他数据库,查找其他驱动程序。纯粹谈到MySQL / Ruby,返回的结果是Mysql::Result

您使用each_hash对此进行迭代,并且该块会为该行生成一个哈希值。然后,您可以使用each_pair迭代哈希。 E.g:

result = MyModel.connection.execute('select * from foos')
result.each_hash do |row|
  row.each_pair do |k, v|
    puts "column #{k} contains #{v}"
  end
end