2010-09-02 4 views
1

J'ai le code suivant qui affiche des instructions dans une liste ordonnée. Quand il est rendu dans le navigateur, il affiche toutes les instructions à la fin sur une seule ligne. Est-ce que je fais quelque chose de mal? Voir la sortie ci-dessous par exemple.itération de chaîne utilisant each_line

code:

<% @recipe.instructions.each_line do |instruction| %> 
    <li><%= instruction %></li> 
<% end %> 

Sortie:

<p> 
    <b>Instructions:</b> 
    <ol> 
     <li>Roast garlic 
</li> 
     <li>test 
</li> 
     <li>eat icecream</li> 
Roast garlic 
test 
eat icecream </ol> 
</p> 

Rails 3 1.9.2dev rubis RC2 (2010-07-11 révision 28618)

+0

Pouvez-vous partager le code ci-dessus et en dessous de ce? J'ai l'impression qu'il pourrait y avoir un code de débogage temporaire qui guette ... – Brian

+0

En fait, vous pouvez voir tout le code, voici la page en question http://github.com/quattro004/scratches/blob/master/app/views/ recipes/show.html.erb voir autour de la ligne 46 - 53. – Reese

Répondre

5

Êtes-vous sûr que vous ne faites pas quelque chose comme ça à la place?

<%= @recipe.instructions.each_line do |instruction| %> 
    <li><%= instruction %></li> 
<% end %> 

Notez le extra = au début de la boucle. Puisque each_line renvoie la chaîne, elle va à nouveau cracher la chaîne.

+0

En fait, j'obtenais l'avertissement de dépréciation suivant sur cette ligne (AVERTISSEMENT DE DEPRECATION: <% %> les assistants de bloc de style sont obsolètes, veuillez utiliser <%= %>), donc j'ai ajouté le = et l'avertissement s'en va mais la sortie est toujours la même. – Reese

+0

Je peux me tromper, mais je ne pense vraiment pas <% %> a été obsolète. <%- %> peut avoir été. – AboutRuby

0

Donc j'ai finalement compris cela. J'ai changé le code pour utiliser Array # each et enlevé le signe égal dans le block helper.

Code final:

<% @recipe.instructions.split(/\r\n/).each do |instruction| %> 
    <li><%= instruction %></li> 
<% end %>