2009-11-25 7 views
6

comment puis-je diviser les éléments d'un modèle en deux morceaux de taille égale afin que je puisse les montrer dans deux colonnes?RoR montrer les éléments dans deux colonnes

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() supprime malheureusement l'élément central.

+0

Pourriez-vous être plus précis? Montrez-nous du code! :) –

Répondre

8

Le tableau # in_groups_of est une extension principale et n'est disponible que dans Rails. Ce qu'il utilise est la méthode each_slice.

Vous pouvez l'utiliser comme ceci:

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 

vous donnera

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

Notez que vous devez vérifier que a.size est plus grande que 0 ou vous obtiendrez une exception ArgumentError en raison d'une taille de tranche invalide.

+0

si c'est seulement disponible dans les rails, c'est parfaitement bien. –

+0

Bel appel sur la vérification de la taille étant> 0. Ce m'a mordu aujourd'hui, merci! –

0

Une approche consiste à utiliser jQuery. Il y a plusieurs plugins qui peuvent accomplir cela pour vous.

Ensuite, après avoir les deux morceaux, commencez à remplir un div avec le premier groupe, une fois arrivé à la fin, commencez le deuxième groupe dans un second div. Ensuite, utilisez css pour positionner et styliser les deux divs les uns à côté des autres.

2

que je ne dois utiliser dans des rails, cela a fonctionné pour moi:

>> 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

Où essayez-vous de montrer ces éléments?

Si c'est dans une vue, vous ne devriez pas modifier votre modèle; Vos modèles doivent rester indépendants de votre présentation.

Si vous souhaitez présenter des résultats sur une page Web, vous devez utiliser html et css dans votre affichage. Même à votre avis, vous n'aurez probablement pas besoin de «diviser» vos éléments en sous-réseaux.

Voir this page, par exemple. Si vous regardez le code source, les listes sont toujours "l'une après l'autre", sans se diviser en groupes. Le CSS conditionne la façon dont le texte est positionné.

+0

la page est un mauvais exemple car elle ne conduit pas à l'ordre désiré si vous rappelez le bloc de code dans ma question. J'essaie de placer chaque partie du tableau dans une variable d'instance qui est ensuite passée à la vue et affichée. ou y a-t-il un meilleur moyen? –

+0

Salut Patrick, je ne comprends pas pourquoi vous dites que la commande n'est pas conservée. Si vous avez le tableau comme [1,2,3,4] vos éléments html seront etc Vous aurez seulement à passer cette variable à la vue, et il va le rendre en deux colonnes utilisant css. Je ne vois pas le besoin de deux variables. – kikito

Questions connexes