2009-11-25 9 views
6

¿cómo puedo dividir los elementos de un modelo en dos piezas del mismo tamaño para que pueda mostrarlos en dos columnas?RoR muestra elementos en dos columnas

i have this: 

element 1 
element 2 
element 3 
element 4 
element 5 


and i want this: 

element 1 element 4 
element 2 element 5 
element 3 

split() lamentablemente elimina el elemento medio.

+0

¿Podría ser más específico? ¡Muéstranos un código! :) –

Respuesta

8

La matriz # in_groups_of es una extensión principal y solo está disponible en Rails. Sin embargo, lo que usa es el método each_slice.

Se puede utilizar de esta manera:

a = ["element 1", "element 2", "element 3", "element 4", "element 5"] 
a.each_slice((a.size/2.0).ceil) { |slice| puts slice } if a.size > 0 

le dará

["element 1", "element 2", "element 3"] 
["element 4", "element 5"] 

Tenga en cuenta que debe comprobar que a.size es más grande que 0 o se obtendrá una excepción ArgumentError debido al tamaño de corte no válido.

+0

si solo está disponible en rieles, está perfectamente bien. –

+0

Bonita llamada para verificar que el tamaño sea> 0. ¡Eso me mordió hoy, gracias! –

0

Un enfoque es usar jQuery. Hay varios complementos que pueden lograr esto para usted.

Posteriormente, después de tener los dos trozos, comience a llenar un div con el primer grupo, una vez que llegue al final, inicie el segundo grupo en un segundo div. Luego use css para posicionar y estilizar los dos divs uno al lado del otro.

2

ya que sólo necesita utilizar este en los carriles, esto funcionó para mí:

>> a = [1,2,3,4,5] 
=> [1, 2, 3, 4, 5] 
>> a.in_groups_of((a.size/2.0).ceil, false) if a.size > 0 
=> [[1, 2, 3], [4, 5]] 
0

Cuando estás tratando de mostrar estos elementos?

Si está en una vista, no debe modificar su modelo; sus modelos deben mantenerse independientes de su presentación.

Si desea presentar resultados en una página web, debe usar html y css en su vista. Incluso en su opinión, probablemente no necesitará "dividir" sus elementos en sub-arrays.

Véase this page, por ejemplo. Si mira el código fuente, las listas son siempre "una después de la otra", sin dividirse en grupos. El CSS condiciona cómo se posiciona el texto.

+0

la página es un mal ejemplo porque no conduce al orden deseado si recuerda el bloque de código en mi pregunta. Estoy tratando de poner cada parte de la matriz en una variable de instancia que luego se pasa a la vista y se muestra. ¿O hay un mejor camino? –

+0

Hola Patricio, no entiendo por qué dices que el pedido no se conserva. Si tiene la matriz como [1,2,3,4] sus elementos html serán etc. Solo deberá pasar esa variable a la vista, y la convertirá en dos columnas usando css. No veo la necesidad de dos variables. – kikito

Cuestiones relacionadas