2012-05-31 20 views
5

Tengo tres arreglos que me gustaría organizar verticalmente en una tabla HTML. Cada matriz tendrá sus datos poblados en una columna de arriba a abajo.¿Cómo llenar una tabla con datos verticalmente?

Por ejemplo, tengo tres matrices:

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

Quiero la mesa para tener este aspecto:

<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

Mismo problema, no hay solución (todavía): http://stackoverflow.com/questions/3669957/transpose-a-html-table – joeytwiddle

+0

Y otro: http://stackoverflow.com/questions/2128663/display-data- in-columns-not-rows-using-ruby-on-rails – joeytwiddle

Respuesta

1

Tome un vistazo a esta página web: Generate vertically-ordered HTML table in Ruby

Aquí es el código relevante (las variables de instancia en este ejemplo se usan simplemente para mayor claridad al identificar qué controla el número de columnas y filas):

<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

probablemente me utilizo Array#transpose a reorganizar las cosas para que coincida con lo que su <table> debe verse como:

rows = [ fruit, veges, meat ].transpose 

Ahora rows será parecida:

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

y la generación de su mesa es una simple cuestión de iterar sobre rows:

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

+1 para 'transpose'. Es perfecto para esto –

Cuestiones relacionadas