2010-11-04 8 views
0

J'essaie de parcourir chaque nom de colonne à partir de mes résultats pour les placer dans la première rangée de ma vue. J'utilise la méthode execute sql pour interroger la base de données.Comment faire une itération à travers les noms de colonnes à partir des résultats d'exécution sql

J'ai ce jusqu'à présent, mais il n'est pas sortie ce que je dois:

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

quelle est la question? –

+0

À quoi ressemble le résultat de votre requête? – monocle

+0

La question est, j'essaye d'itérer chaque «nom de colonne» à une cellule de tableau. La requête peut être différente selon ce que l'utilisateur sélectionne comme conditions. Alors, comment irais-je à travers le nom de chaque colonne par résultat? – oprogfrogo

Répondre

0

Consulter: MySQL/Ruby (http://www.tmtm.org/en/mysql/ruby/) si vous itérez une base de données MySQL. D'autres bases de données, recherchez les autres pilotes. Parlant purement de MySQL/Ruby, le résultat renvoyé est un Mysql::Result.

Vous itérez ceci en utilisant each_hash et le bloc génère un hachage pour la ligne. Vous pouvez ensuite itérer le hash en utilisant each_pair. Par exemple:

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

Je reçois une erreur no method pour each_pair dans rails. – oprogfrogo

+0

Si quelqu'un peut faire la lumière sur ce sujet, merci. – oprogfrogo

+0

J'ai changé l'exemple de code. Notez qu'il utilise 'result.each_hash' pour obtenir un hachage pour la ligne. Puis il itère le hachage en utilisant 'each_pair' en obtenant la clé (nom de la colonne) et la valeur. –

3

Pour les gens qui viennent ici 2,5 ans après cela a été demandé, j'ai pu le faire avec Rails et Ruby 1.9.3 3.2.13-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 

Résultat:

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

Vous pouvez y accéder:

result.first["user_id"] 

Et s'il y a 3 résultats et que vous voulez obtenir le 2ème:

result[1]["user_id"] 
+0

sauvé ma vie ici l'homme! –

Questions connexes