2012-05-31 8 views
5

Ho tre array che mi piacerebbe organizzare in verticale in una tabella HTML. Ogni array avrà i suoi dati popolati in una colonna dall'alto verso il basso.Come popolare una tabella con i dati in verticale?

Per esempio, ho tre matrici:

fruit = ['pear', 'apple', 'orange'] 
veges = ['corn', 'radish', 'lettuce'] 
meat = ['beef', 'chicken', 'pork'] 

Voglio che il tavolo a guardare come questo:

<table> 
    <tr> 
    <td> 
     pear 
    </td> 
    </tr> 
    <tr> 
    <td> 
     corn 
    </td> 
    </tr> 
    <tr> 
    <td> 
     beef 
    </td> 
    </tr> 

    <tr> 
    <td> 
     apple 
    </td> 
    </tr> 
    <tr> 
    <td> 
     radish 
    </td> 
    </tr> 
    <tr> 
    <td> 
     chicken 
    </td> 
    </tr> 

    <tr> 
    <td> 
     orange 
    </td> 
    </tr> 
    <tr> 
    <td> 
     lettuce 
    </td> 
    </tr> 
    <tr> 
    <td> 
     pork 
    </td> 
    </tr> 
</table> 
+0

Lo stesso problema, nessuna soluzione (ancora): http://stackoverflow.com/questions/3669957/transpose-a-html-table – joeytwiddle

+0

E un altro: http://stackoverflow.com/questions/2128663/display-data- in-column-not-rows-using-ruby-on-rails – joeytwiddle

risposta

1

Date un'occhiata a questo sito: Generate vertically-ordered HTML table in Ruby

Ecco il codice rilevante (le variabili di istanza in questo esempio vengono utilizzate semplicemente per chiarezza nell'identificazione di cosa controlla il numero di colonne e righe):

<table> 
    <tbody> 
    <% 0.upto(@rows_per_column-1).each do |row| %> 
     <tr> 
     <% 0.upto(@columns-1).each do |column| %> 
     <% index = row + (column * @rows_per_column) %> 
     <td><%= index %></td> 
     <% end %> 
     </tr> 
    <% end %> 
    </tbody> 
</table> 
4

probabilmente sarei uso Array#transpose per riorganizzare le cose per soddisfare ciò che la vostra <table> dovrebbe essere simile:

rows = [ fruit, veges, meat ].transpose 

Ora rows sarà simile:

[ 
    ["pear", "corn", "beef"], 
    ["apple", "radish", "chicken"], 
    ["orange", "lettuce", "pork"] 
] 

e generare il vostro tavolo è un semplice questione di iterating su rows:

%table 
    - rows.each do |row| 
    %tr 
     - row.each do |food| 
     %td= food 
+1

+1 per 'transpose'. È perfetto per questo. –