2010-12-07 28 views
0

J'ai actuellement une table qui est divisée en 4 colonnes en tant que tel:Se débarrasser d'erreur Nil classe en Ruby

<table id="customers"> 
<tr> 
    <th><em class='require'></em><%= Release.columns_hash['version'].human_name -%></th> 
    <th><em class='require'></em><%= Release.columns_hash['version'].human_name -%></th> 
    <th><em class='require'></em><%= Release.columns_hash['version'].human_name -%></th> 
    <th><em class='require'></em><%= Release.columns_hash['version'].human_name -%></th> 
</tr> 
<% @releases.in_groups_of(4).each do |releasesplit| %> 
<tr> 
    <% releasesplit.each do |release| %> 
    <td align="center"><%= release.version %></td> 
    <% end %> 
</tr> 
<% end %> 

Cependant, le problème est à chaque fois que j'ajouter une autre entrée à la table qui est non divisible par 4 J'ai l'erreur: undefined method version' for nil:NilClass

Des idées pour résoudre ce problème? Merci,

Répondre

4

Il semble que l'une de vos versions dans @releases variable est nil.

Vous pouvez le faire: @releases.compact.in_groups_of(4).each do ...

Array#compact retourne une copie du tableau original avec nil éléments supprimés.

Cependant, je vous suggère fortement de rechercher pourquoi l'un d'entre eux est nul en premier lieu.

Ce n'est pas la question du regroupement, puisque c'est ainsi groupement fonctionne:

irb(main):002:0> [1,2,3].each_slice(2) {|group| puts group.inspect} 
[1, 2] 
[3] 
=> nil 

(in_groups_of est juste un alias de ActiveSupport pour each_slice)

+0

Je ne savais pas 'compact'. Agréable! –

+0

Je n'ai pas d'élément nul, c'est juste que le tableau a 30 valeurs et quand ruby ​​a essayé de se diviser en permet de dire 4 groupes, 28/4 = 7, donc 7 valeurs par colonne. mais quand il atteint le tableau numéro 31, il essaye d'obtenir la valeur, mais il a été créé et donc nul n'est retourné. Mais compact l'a fait pour moi. Merci :) – TheRealVayne

+0

Ce n'est pas comment in_groups_of fonctionne. Je suis sûr que vous avez un élément nul. J'ai mis à jour ma réponse. – glebm