2010-11-04 23 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