Comment puis-je parcourir un tableau dans les rails?

J'ai fait une requête à MySql, mais travaille dans les Rails et mysql2 gem.

Voici les informations:

http://sqlfiddle.com/#!2/9adb8/6

La requête fonctionne très bien sans problèmes et montrer ce résultat:

 UNIT  V1  A1  N1   V2 A2  N2   V3  A3  N3   V4  A4  N4   V5  A5  N5
 LIFE  2   0   0    1   2  0    0   0   0     0   0   0   0    0   0
 ROB   0   1   0    0   1  2    0   0   0     0   0   0   0    0   0 

-Installé mysql2 gem pour les rails 2.3.8

gem install mysql2 -v0.2.6

-Créé le contrôleur:

class PolicyController < ApplicationController

   def index
      @result =  ActiveRecord::Base.connection.execute("select distinct @sql := concat('SELECT pb.name as unit,',group_concat(concat('SUM(CASE WHEN p.state =0 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS v',id,',SUM(CASE WHEN p.state =1 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS a',id,',SUM(CASE WHEN p.state =2 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS n',id)),' FROM cia_ensures ce LEFT JOIN policies p on ce.id = p.cia_ensure_id INNER JOIN policy_business_units pb ON pb.id = p.policy_business_unit_id  INNER JOIN comercial_areas ca ON ca.id = pb.comercial_area_id AND ca.id=1  Group by p.policy_business_unit_id') from cia_ensures where id in(1,2,3,4,5);")
      @result2 = ActiveRecord::Base.connection.execute("prepare stmt from @sql;")
      @result3 = ActiveRecord::Base.connection.execute("execute stmt;")
   end

end

Voici le log:

SQL (0.9ms)   select distinct @sql := concat('SELECT pb.name as unit,',group_concat(concat('SUM(CASE WHEN p.state =0 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS v',id,',SUM(CASE WHEN p.state =1 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS a',id,',SUM(CASE WHEN p.state =2 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS n',id)),' FROM cia_ensures ce LEFT JOIN policies p on ce.id = p.cia_ensure_id INNER JOIN policy_business_units pb ON pb.id = p.policy_business_unit_id INNER JOIN comercial_areas ca ON ca.id = pb.comercial_area_id AND ca.id=1 Group by p.policy_business_unit_id') from cia_ensures where id in(1,2,3,4,5);
SQL (0.9ms)   prepare stmt from @sql;
SQL (0.2ms)   execute stmt;

Ici est le point de vue (fonctionne très bien et sans problèmes, mais semble être trop long d'écrire plusieurs fois le même code)

<table>
  <% @result3.each do |policy| %>
  <tr>
      <td><%= policy[0] %></td>
      <td><%= policy[1] %></td>
      <td><%= policy[2] %></td>
      <td><%= policy[3] %></td>
      <td><%= policy[4] %></td>
      <td><%= policy[5] %></td>
      ...
  </tr>
  <%end%> 
</table>

J'ai essayé d'utiliser les inspecter mais il affiche toutes les informations en un seul td et non sur chaque td:

<% @result3.each do |policy| %>
<tr>      
 <td align="center"><%= policy.inspect %></td>
</tr>
<%end%> 

Comment puis-je faire pour montrer tout cela sans écrire beaucoup de lignes?

Est-il possible de faire cela en une seule ligne? sans écrire <%= [#] %>

Svp quelqu'un peut m'aider?

Je vais vraiment l'apprécier.

Pouvez-vous inspecter '@result3 " et montrer le contenu?
Oui j'ai essayé, mais il montre tout en un td et non dans chaque td
Ne pouvez-vous pas utiliser each sur chaque objet de stratégie de peu de la même manière que vous avez fait avec @result3?
Oui mais ce qui se passerait si j'ai 100 colonnes? c'est un long code

OriginalL'auteur Carlos Morales | 2014-04-11