2010-11-04 75 views
0

我想从我的结果中遍历每个列名,以放置在我的视图的第一行。我正在使用execute sql方式来查询数据库。如何迭代执行sql结果中的列名

我有这到目前为止,但它不输出什么,我需要:

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

有什么问题吗? – 2010-11-04 00:29:44

+0

你的查询结果是什么样的? – monocle 2010-11-04 00:32:04

+0

问题是,我试图将每个“列名称”迭代到一个表格单元格。查询可以根据用户选择的条件而有所不同。那么,我将如何去遍历每个结果的每个列名称? – oprogfrogo 2010-11-04 00:36:22

回答

0

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

您使用each_hash来迭代此操作,并为该行生成散列。然后你可以使用each_pair迭代散列。例如:

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 
+0

我收到一个没有方法错误的rails中的each_pair。 – oprogfrogo 2010-11-04 01:34:38

+0

如果有人可以请说出这一点,谢谢。 – oprogfrogo 2010-11-04 21:28:31

+0

我更改了代码示例。请注意,它使用'result.each_hash'来获取该行的散列值。然后它使用'each_pair'获取密钥(列名)和值来迭代哈希。 – 2010-11-04 23:43:49

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"] 
+0

在这里拯救了我的人生! – 2017-01-02 20:27:21

相关问题